-
Публікації
123 -
З нами
-
Відвідування
Тип публікації
Профілі
Форум
Маркетплейс
Статті
FAQ
Наші новини
Магазин
Блоги
module__dplus_manager
Усі публікації користувача devel
-
Попробуйте на денвер в другую папку поставить чистый opencart 1.5.6 и выполнить действия из первого сообщения. Выложите логи до замены и после (на чистом oc). У вас в последнем сообщении видно из лога, что решение из первого поста работает, т.к в логе три варнинга до замены, и один - после замены. Вот этот "один" вызван чем то другим..
-
Все может быть. Самая простейшая и малоочевидная опечатка может отнять уйму времени... На чистом opencart 1.5.6 ошибка другая: SyntaxError: JSON.parse: unexpected characterOK<b>Warning</b>: Missing argument 4 for Cart::add(), called in V:\home\clear-oc.test\www\catalog\controller\checkout\manual.php on line 74 and defined in <b>V:\home\clear-oc.test\www\system\library\cart.php</b> on line <b>318</b><b>Notice</b>: Undefined variable: profile_id in <b>V:\home\clear-oc.test\www\system\library\cart.php</b> on line <b>327</b><b>Warning</b>: Missing argument 4 for Cart::add(), called in V:\home\clear-oc.test\www\catalog\controller\checkout\manual.php on line 104 and defined in <b>V:\home\clear-oc.test\www\system\library\cart.php</b> on line <b>318</b><b>Notice</b>: Undefined variable: profile_id in <b>V:\home\clear-oc.test\www\system\library\cart.php</b> on line <b>327</b>{"order_product":[{"product_id":"41","name":"iMac","model":"Product 14","option":[],"download":[],"quantity":1,"stock":true,"price":100,"total":100,"tax":0,"reward":0},{"product_id":"29","name":"Palm Treo Pro","model":"Product 2","option":[],"download":[],"quantity":1,"stock":true,"price":279.99,"total":279.99,"tax":0,"reward":0}],"order_voucher":[],"shipping_method":{"flat":{"title":"Flat Rate","quote":{"flat":{"code":"flat.flat","title":"Flat Shipping Rate","cost":"5.00","tax_class_id":"9","text":"$5.00"}},"sort_order":"1","error":false}},"order_total":[{"code":"sub_total","title":"Sub-Total","text":"$379.99","value":379.99,"sort_order":"1"},{"code":"shipping","title":"Flat Shipping Rate","text":"$5.00","value":"5.00","sort_order":"3"},{"code":"total","title":"Total","text":"$384.99","value":384.99,"sort_order":"9"}],"payment_methods":[],"payment_method":{"cod":{"code":"cod","title":"Cash On Delivery","sort_order":"5"}},"success":"Order totals has been successfully re-calculated!"}
-
Вопрос был не столько риторический, сколько практический =) Скажу иначе: нужен функционал управления балансом кастомера. Чтобы можно было, например, его "обнулить". Возврат денежных средств можно сделать очень быстро. Речь идет именно о неуправляемости баланса в ИМ. Попробуйте в админке сделать транзакцию у кастомера, и вы увидите - она добавляется, но ни изменить (вдруг менеджер опечатался в сумме), ни удалить транзакцию иначе, как через БД - нельзя. Приведенный выше пример надуман, но возможен в реальной жизни. Что тогда менеджеру делать? ))
-
Слегка "проапгрейдил" модуль автора. Теперь он при заходе в "просмотр заказа" добавляет кнопку "редактировать заказ", а при заходе в "редактировать в заказ" - добавляет кнопку "просмотр заказа". button_edit.xml
- 12 відповідей
-
- 1
-
-
- админка
- админ-панель
- (і ще %d)
-
$_['button_invoice'] = 'Показать счет'; Эта и подобные строки "обрамленные" тегом <search> в xml варианте очень критичны к кол-ву пробелов/табуляций и переводу. Если в вашем языковом файле перевод отличается, или в контроллере в коде перед $this->... другой отступ - xml может не сработать. Проверено для opencart 1.5.6
- 12 відповідей
-
- админка
- админ-панель
- (і ще %d)
-
<td class="left"><?php echo $entry_product_id; ?></td> <td class="left"><input type="text" name="product_id" value="" /> <input type="hidden" name="product_id" value="" /><?php echo $entry_or; ?></td> <td class="left"><?php echo $entry_product; ?></td> <td class="left"><input type="text" name="product" value="" /> <input type="hidden" name="product_id" value="" /></td> С самой формой все понятно. Скрипт внизу шаблона не осилил Вероятно, табы, и формы в каждом из табов тоже этим скриптом отрабатываются. Не нашел, какой кусок обрабатывает именно эту форму. Можете носом ткнуть?
-
Значит у вас $amount равен $price. Где-то в контроллере library\tax.php забыли $amount подправить. Вообще, надо понимать, что мы принимаем за : $value в ф-ии calculate - цена с НДС $amount - НДС и в шаблоне: $price - цена с НДС $tax - цена без НДС Еще вариант - в админке должно быть Система-Настройки-Опции: - Отображать цены с налогом: Да - Проверка номера налога: Нет Система-Локализация-Налоги-Налоговые ставки: Название: НДС Ставка: 18 Тип: процент Группа покупателей: основная Геозона: РФ Ставьте в коде отладочные строки, типа: echo '$amount = ', $amount, '</br>'; Помогает разобраться на каком этапе у вас ошибка в рассчетах.
-
Добавьте переменную $nds в массив $this->data['products'][] = array( ....... ....... ) вот так должно быть: $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $result['rating'], 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url), 'nds' => $nds );
-
В админке есть возможность добавить в существующий заказ другие товары. Для этого есть поле ввода наименования товара, поле кол-ва и кнопка "Добавить". Возникли вопросы по этой форме: 1) Где обрабатываются вводимые данные 2) Как они передаются в контроллер Есть необходимость ввести доп. поле ввода (ID товара), т.к. по некоторым товарам проще запомнить id, чем название.
-
При попытке добавить в существующи заказ еще товары (менеджером, в админке), вылетает ошибка SyntaxError: Unexpected tocken. В логах вот что: 2013-11-04 14:10:43 - PHP Warning: Missing argument 4 for Cart::add(), called in www\catalog\controller\checkout\manual.php on line 74 and defined in www\system\library\cart.php on line 318 2013-11-04 14:10:43 - PHP Notice: Undefined variable: profile_id in www\system\library\cart.php on line 327 Решение найдено на форуме разработчика, как "предположительно работающее". Я проверил - работает. Решение: замена в /system/library/cart.php public function add($product_id, $qty = 1, $option, $profile_id) { на: public function add($product_id, $qty = 1, $option, $profile_id = '') { Opencart 1.5.6, Default Theme.
-
Я нереально :-D ступил : $mas_order_history_id = $this->db->query("SELECT order_history_id FROM " . DB_PREFIX . "order_history WHERE order_id = '" . $this->request->get['order_id'] . "'"); $last_order_history_id = end($mas_order_history_id->rows); echo 'last_order_history_id: ', $last_order_history_id['order_history_id'], '</br>'; Спасибо sv2109 за наводку. Основ синтаксиса я не знаю, знакомлюсь по-ходу дела..
-
Пишу запрос к БД: $mas_order_history_id = $this->db->query("SELECT order_history_id FROM " . DB_PREFIX . "order_history WHERE order_id = '" . $this->request->get['order_id'] . "'"); По моей логике, запрос возвращает массив идентификаторов статусов конкретного загаза order_id. $mas_order_history_id->row['order_history_id'] возвращает значение первого id $mas_order_history_id->num_rows возвращает кол-во идентификаторов (размер массива) $mas_order_history_id->rows возвращает значения всех идентификаторов Как получить значение текущего идентификатора? Я решил пока так: текущий_ид=первый_ид+количество_ид-1. Допустим, первый_ид=10, количество_ид=4. Тогда текущий_ид=10+4-1=13. Но мне кажется, что должно быть решение проще, как получить значение последней (она же текущая) ячейки. Коллеги, подскажите, как оптимизировать этот запрос и код?
-
Задача №3. Вывести значение цены товара с НДС и отдельно НДС в результат поиска. Открываем \catalog\controller\product\search.php Находим: if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']); } else { $tax = false; } Меняем на : $amount = $this->currency->format($this->tax->getTax($result['price'], $result['tax_class_id'])); if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$result['special'] ? ($result['special'] - $amount) : ($result['price'] - $amount)); $nds = $this->currency->format((float)$price - ($result['special'] ? ($result['special'] - $amount) : ($result['price'] - $amount))); } else { $nds = false; $tax = false; } И добавим в массив $this->data['products'][] = array() нашу переменную ндс: 'nds' => $nds Правим шаблон \catalog\view\theme\default\template\product\search.tpl Меняем строку: <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> На эту: <span class="price-tax"><?php echo 'В т.ч. НДС:'; ?> <?php echo $product['nds']; ?></span> Задача №4. Скорректировать значение цены в корзине. Чтобы в корзине не добавлялся налог к «Итого», а также правильно отображалась информация в блоке «Х товаров – ХХХХр», в файле \catalog\model\total\tax.php меняем $total += $value; на $total = $total; Задача №5. Корректная цена в счете. Открываем \admin\controller\sale\order.php и дважды в файле заменяем строки : 'price' => $this->currency->format($product['price'] + ($this->config->get('config_tax') ? $product['tax'] : 0), $order_info['currency_code'], $order_info['currency_value']), 'total' => $this->currency->format($product['total'] + ($this->config->get('config_tax') ? ($product['tax'] * $product['quantity']) : 0), $order_info['currency_code'], $order_info['currency_value']) На эти: 'price' => $this->currency->format($product['price'], $order_info['currency_code'], $order_info['currency_value']), 'total' => $this->currency->format($product['total'], $order_info['currency_code'], $order_info['currency_value']) Со стороны покупателя, в личном кабинете, счет также отображает некорректную сумму. Правим файл \catalog\controller\account\order.php Должно стать так: 'price' => $this->currency->format($product['price'], $order_info['currency_code'], $order_info['currency_value']), 'total' => $this->currency->format($product['total'], $order_info['currency_code'], $order_info['currency_value']), ВСЕ! П.С. Просьба не пинать, т.к. это первый опыт php5 (ООП) Если есть желающие переделать решение для vqmod - только приветствуется. Проблем с обновлением движка тогда не будет.
-
Чтобы в карточке товара и каталоге отображалась цена с налогом, а под ним размер налога, делаем следующие изменения: В файле \system\library\tax.php: Ищем блок: public function calculate($value, $tax_class_id, $calculate = true) { if ($tax_class_id && $calculate) { $amount = $this->getTax($value, $tax_class_id); return $value + $amount; } else { return $value; } } Заменяем его на: public function calculate($value, $tax_class_id, $calculate = true) { if ($tax_class_id && $calculate) { return $value; } else { $amount = $this->getTax($value, $tax_class_id); return $value - $amount; } } Смысл этой замены в том, что мы под $value будем подразумевать стоимость одного товара с учетом ндс (а не наоборот, как задумано разработчиками), и наша задача не прибавить значение налога к сумме, а выделить его из суммы. Под $amount будем подразумевать размер налог (в валюте и формате магазина). Не путать $amount и $tax_rate! Последний – это именно процентная ставка, а $amount – конкретное значение налога для каждого конкретного товара, в рублях в нашем случае. В РФ ставка НДС=18%. Размер налога вычисляется по формуле: Цена товара * Ставку налога /(100+Ставка налога), или Цена товара*18/118. Для исправления формулы налога, находим в файле \system\library\tax.php следующий блок: if ($tax_rate['type'] == 'F') { $amount += $tax_rate['rate']; } elseif ($tax_rate['type'] == 'P') { $amount += ($value / 100 * $tax_rate['rate']); } И меняем его на: if ($tax_rate['type'] == 'F') { $amount += $tax_rate['rate']; } elseif ($tax_rate['type'] == 'P') { $amount += ($value * $tax_rate['rate']/ (100 + $tax_rate['rate'])); } Если теперь в админке выбрать пункт «Отображать цены с налогом» - «Да», то будет выводится значение $value (которое у нас уже включает НДС). Если выбран чекбокс «Нет» - будет отображаться Цена без НДС (сли это вообще кому-то нужно). Задача №2. Вывести значение размера налога (в рублях) в карточке товара и каталоге, вместо «Цена без НДС». Каталог. Для решения этой задачи перейдем к файлу \catalog\controller\product\category.php. Найдем в нем блок: if ((float)$result['special']) { ….. } И заменим: if ((float)$result['special']) { $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))); $amount = $this->tax->getTax($result['special'], $result['tax_class_id']); } else { $special = false; $amount = $this->tax->getTax($result['price'], $result['tax_class_id']); } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)($result['special'] ? ($result['special'] - $amount) : ($result['price'] - $amount))); $nds = $this->currency->format((float)($result['special'] ? $amount : $amount)); // echo 'tax=', $tax, '</br>'; // echo 'price=', $result['price']-$amount, '</br>'; // echo 'amount=', $amount; } else { $tax = false; $nds = false; } Закомменченые строки можно удалить, они для отладки. Добавим в массив $this->data['products'][] = array() нашу переменную ндс: 'nds' => $nds Здесь мы обращаемся к методу getTax, который возвращает значение НДС (в рублях), вводим новую переменную $nds, которую получаем из разницы цены с ндс ($price) и цены без ндс ($result[‘price’]). Заодно, корректируем значение переменной $tax, также уменьшая ее на размер налога НДС ($amount), поскольку именно $tax выводится в шаблоне как «цена без НДС». Если этого не сделать, «Цена без НДС» и «Цена» будут равны, что неверно. Подправим шаблон категории \catalog\view\theme\default\template\product\category.tpl Заменим в нем блок: <?php if ($product['tax']) { ?> <br /> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> На такой: <?php if ($product['tax']) { ?> <br /> <span class="price-tax"><?php echo 'В т.ч. НДС:' ?> <?php echo $product['nds']; ?></span> <?php } ?> Я нарочно убрал <?php echo $product['tax']; ?>, т.к. для меня эта информация бесполезна. Но можно его оставить, сделав еще одной отдельной строкой размер ндс: <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></br><?php echo 'В т.ч. НДС:' ?> <?php echo $product['nds']; ?></span> Карточка товара. Аналогично, открываем файл контроллера \catalog\controller\product\product.php и меняем в нем блок: if ((float)$product_info['special']) { …. } На этот: if ((float)$product_info['special']) { $this->data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax'))); $amount = $$this->tax->getTax($product_info['special'], $product_info['tax_class_id']); } else { $this->data['special'] = false; $amount = $this->tax->getTax($product_info['price'], $product_info['tax_class_id']); } if ($this->config->get('config_tax')) { $this->data['tax'] = $this->currency->format((float)$product_info['special'] ? ($product_info['special'] - $amount) : ($product_info['price'] - $amount)); $this->data['nds'] = $this->currency->format((float)$product_info['special'] ? $amount : $amount); } else { $this->data['nds'] = false; $this->data['tax'] = false; } Подправим шаблон карточки товара \catalog\view\theme\default\template\product\product.tpl Заменим строку: <span class="price-tax"><?php echo $text_tax; ?> <?php echo $tax; ?></span><br /> На эту: <span class="price-tax"><?php echo 'В т.ч. НДС:'; ?> <?php echo $nds; ?></span><br />
-
В чистом opencart 1.5.6 увидел новый пункт tab-marketplace-links. В \www\admin\view\template\catalog\product_form.tpl табы перечислены в этом блоке: <div id="tabs" class="htabs"><a href="#tab-general"><?php echo $tab_general; ?></a><a href="#tab-data"><?php echo $tab_data; ?></a><a href="#tab-links"><?php echo $tab_links; ?></a><a href="#tab-attribute"><?php echo $tab_attribute; ?></a><a href="#tab-option"><?php echo $tab_option; ?></a><a href="#tab-profile"><?php echo $tab_profile; ?></a><a href="#tab-discount"><?php echo $tab_discount; ?></a><a href="#tab-special"><?php echo $tab_special; ?></a><a href="#tab-image"><?php echo $tab_image; ?></a><a href="#tab-reward"><?php echo $tab_reward; ?></a><a href="#tab-design"><?php echo $tab_design; ?></a></div> <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form"> За ним идет форма. Если табы не умещаются в одну строку, то возникает глюк, с отображением неуместившихся в строку табов: они "жмутся" не к левому краю div class="content", а к левому краю активного таба. Что еще хуже, - область настроек (form id='form') также начинает ползти вправо и появляется горизонтальная прокрутка. Если в \www\admin\view\stylesheet\stylesheet.css добавить: #form {clear:both;} то левая граница формы будет у левого края блока div class="content". Как укратить табы пока не разобрался. В коде, приведенном выше таб #tab-marketplace отсутствует, однако он выводится : <a href="#tab-openbay" style="display: block;"> tab_marketplace_links </a> Почему у него display: block, когда у других табов inline - непонятно. Каким образом он попадает в контейнер div id='tabs' - тоже загадка. Повторюсь, проьлема в чистом opencart 1.5.6. в ситуации, когда табы не умещаются в одну строку.:
-
Решение с правкой БД годится для программера. Менеджеру же не дашь доступ к базе? Решение с зачислением "минус икс рублей/балов" не пойдет. У магазина должен каждый шаг отслеживаться. Других решений нет?
-
Что такое "Моя информация"? Это "Личный кабинет"? Проверил у себя - ссылки смены пароля и прочие (все) в ЛК работают верно. Почистите кеш еще раз. Предупреждение означает, что вы вызываете в шаблоне переменную b_account, значение которой не определено. Судя по "public_html/catalog/view/theme/my_template/template/module/account.tpl" - шаблон у вас кастомный, Поставьте дефолтный шаблон, проверьте работу этих ссылок на нем. Если на нем ошибок нет - ищите, где в шаблоне присваивается значение переменной b_account. В оригинальном account.tpl таких переменных нет. Листинг: <div class="box"> <div class="box-heading"><?php echo $heading_title; ?></div> <div class="box-content"> <ul> <?php if (!$logged) { ?> <li><a href="<?php echo $login; ?>"><?php echo $text_login; ?></a> / <a href="<?php echo $register; ?>"><?php echo $text_register; ?></a></li> <li><a href="<?php echo $forgotten; ?>"><?php echo $text_forgotten; ?></a></li> <?php } ?> <li><a href="<?php echo $account; ?>"><?php echo $text_account; ?></a></li> <?php if ($logged) { ?> <li><a href="<?php echo $edit; ?>"><?php echo $text_edit; ?></a></li> <li><a href="<?php echo $password; ?>"><?php echo $text_password; ?></a></li> <?php } ?> <li><a href="<?php echo $address; ?>"><?php echo $text_address; ?></a></li> <li><a href="<?php echo $wishlist; ?>"><?php echo $text_wishlist; ?></a></li> <li><a href="<?php echo $order; ?>"><?php echo $text_order; ?></a></li> <li><a href="<?php echo $download; ?>"><?php echo $text_download; ?></a></li> <li><a href="<?php echo $return; ?>"><?php echo $text_return; ?></a></li> <li><a href="<?php echo $transaction; ?>"><?php echo $text_transaction; ?></a></li> <li><a href="<?php echo $newsletter; ?>"><?php echo $text_newsletter; ?></a></li> <li><a href="<?php echo $recurring; ?>"><?php echo $text_recurring; ?></a></li> <?php if ($logged) { ?> <li><a href="<?php echo $logout; ?>"><?php echo $text_logout; ?></a></li> <?php } ?> </ul> </div> </div> Видно, что здесь переменные другие: $login, $forgotten, $account и т.п. У вас же совсем другие. Ищите в модели и контроллере свои или ищите в seo_pro "$login, $forgotten, $account и т.п." и заменяйте на переменные вашего шаблона. В любом случае - это проблема несовместимости кастомного шаблона и seo_pro. Кроме того, в БД в url_alias прописаны алиасы именно к ссылкам, оперирующим дефолтными переменными. Т.е. поправив seo_pro, вам скорее всего придется прописывать к своим переменным и алиасы в БД.
-
на opencart копируете seo_pro.php в catalog\controller\common (например, из "seo_pro из ocStore_v1.5.5.1"), а в vqmod\xml кидаете seo_pro.xml (например, из "vQmod для версии 1.5.5.1"). Переименовываете htaccess.txt в .htaccess. Делаете запрос к БД : ALTER TABLE `oc_product_to_category` ADD `main_category` tinyint(1) NOT NULL DEFAULT '0'; Открываете index.php и находите $controller->addPreAction(new Action('common/seo_url')); меняете на: if (!$seo_type = $config->get('config_seo_url_type')) { $seo_type = 'seo_url';}$controller->addPreAction(new Action('common/' . $seo_type)); Делаете запросы к БД: INSERT INTO oc_url_alias (query, keyword) VALUES ('common/home', ''); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/wishlist', 'wishlist'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/account', 'my-account'); INSERT INTO oc_url_alias (query, keyword) VALUES ('checkout/cart', 'shopping-cart'); INSERT INTO oc_url_alias (query, keyword) VALUES ('checkout/checkout', 'checkout'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/login', 'login'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/logout', 'logout'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/order', 'order-history'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/newsletter', 'newsletter'); INSERT INTO oc_url_alias (query, keyword) VALUES ('product/special', 'specials'); INSERT INTO oc_url_alias (query, keyword) VALUES ('affiliate/account', 'affiliates'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/voucher', 'gift-vouchers'); INSERT INTO oc_url_alias (query, keyword) VALUES ('product/manufacturer', 'brands'); INSERT INTO oc_url_alias (query, keyword) VALUES ('information/contact', 'contact-us'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/return/insert', 'request-return'); INSERT INTO oc_url_alias (query, keyword) VALUES ('information/sitemap', 'sitemap'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/forgotten', 'forgot-password'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/download', 'downloads'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/return', 'returns'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/transaction', 'transactions'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/register', 'create-account'); INSERT INTO oc_url_alias (query, keyword) VALUES ('product/compare', 'compare-products'); INSERT INTO oc_url_alias (query, keyword) VALUES ('product/search', 'search'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/edit', 'edit-account'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/password', 'change-password'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/address', 'address-book'); INSERT INTO oc_url_alias (query, keyword) VALUES ('account/reward', 'reward-points'); INSERT INTO oc_url_alias (query, keyword) VALUES ('affiliate/edit', 'edit-affiliate-account'); INSERT INTO oc_url_alias (query, keyword) VALUES ('affiliate/password', 'change-affiliate-password'); INSERT INTO oc_url_alias (query, keyword) VALUES ('affiliate/payment', 'affiliate-payment-options'); INSERT INTO oc_url_alias (query, keyword) VALUES ('affiliate/tracking', 'affiliate-tracking-code'); INSERT INTO oc_url_alias (query, keyword) VALUES ('affiliate/transaction', 'affiliate-transactions'); INSERT INTO oc_url_alias (query, keyword) VALUES ('affiliate/logout', 'affiliate-logout'); INSERT INTO oc_url_alias (query, keyword) VALUES ('affiliate/forgotten', 'affiliate-forgot-password'); INSERT INTO oc_url_alias (query, keyword) VALUES ('affiliate/register', 'create-affiliate-account'); INSERT INTO oc_url_alias (query, keyword) VALUES ('affiliate/login', 'affiliate-login'); Чистите кеш, включаете в админке seo_pro.