Intereting Posts
Как экспортировать несколько строк таблицы mysql с предложением where из php-скрипта? База данных часовых поясов PHP является поврежденной ошибкой php – Неопределенная переменная: stmt in Ошибка анализа: ошибка синтаксиса, неожиданный T_ECHO в Проблема с кодировкой символов в электронной почте, отправленной через PHP? Динамически выбирать изображения для слайд-шоу с помощью javascript быстрый поиск строк в PHP dompdf ошибочно вычисляет разрывы строк Наиболее распространенный / любимый синтаксис для документации внутри кода (комментарии)? Это правильный способ уничтожить все данные сеанса в php? Как защитить cookie аутентификации без SSL Magento: Fatal error: Class 'Mage_Giftcards_Helper_Data' не найден в … / app / Mage.php в строке 546 Как я могу скомпилировать linux для совместного использования со всеми дистрибутивами? php с ошибкой curl ssl: неподдерживаемый протокол php form action php self

Как создать пользовательские URL-адреса с поддержкой SEO в OpenCart?

Как настроить URL-адреса системы в OpenCart? Например, мне бы хотелось, чтобы http://example.com/index.php?route=checkout/cart отображался как http://example.com/cart

Я знаю, что OpenCart предоставляет URL-адреса SEO для продуктов, категорий, производителей и информационных страниц, но не похоже, что есть что-то встроенное (по крайней мере до версии 1.5.0) для чего-либо еще.

Оказывается, это можно сделать с относительно простым изменением на один файл. Нет .htaccess переписать правила, просто исправить файл каталога / контроллера / common / seo_url.php и добавить красивые URL-адреса в существующую таблицу базы данных.


Патч к seo_url.php:

Index: catalog/controller/common/seo_url.php =================================================================== --- catalog/controller/common/seo_url.php (old) +++ catalog/controller/common/seo_url.php (new) @@ -48,7 +42,12 @@ $this->request->get['route'] = 'product/manufacturer/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; - } + } else { + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($this->request->get['_route_']) . "'"); + if ($query->num_rows) { + $this->request->get['route'] = $query->row['query']; + } + } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); @@ -88,7 +87,15 @@ } unset($data[$key]); - } + } else { + $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($data['route']) . "'"); + + if ($query->num_rows) { + $url .= '/' . $query->row['keyword']; + + unset($data[$key]); + } + } } } 

Требуется два изменения. Первая расширяет функцию index() для поиска в таблице url_alias для любого ключевого слова, сопоставляющего $this->request->get['_route_'] .

Вторая расширяет функцию rewrite() чтобы просмотреть таблицу url_alias для всех маршрутов, а не только для продуктов, производителей и информационных страниц.


Добавление записей в базу данных:

 INSERT INTO `url_alias` (`url_alias_id`, `query`, `keyword`) VALUES (NULL, 'checkout/cart', 'cart'); 

Вот и все. http://example.com/cart должен возвращать то же самое, что и http://example.com/index.php?route=checkout/cart , и OpenCart должен распознать $this->url->link('checkout/cart'); и верните ссылку на симпатичный URL http://example.com/cart

Я использую Opencart версии 1.5.5.1, и это точный код, который работал для меня:

 <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => '', 'checkout/cart' => 'cart', 'account/register' => 'register', 'account/wishlist' => 'wishlist', 'checkout/checkout' => 'checkout', 'account/login' => 'login', 'product/special' => 'special', 'affiliate/account' => 'affiliate', 'checkout/voucher' => 'voucher', 'product/manufacturer' => 'brand', 'account/newsletter' => 'newsletter', 'account/order' => 'order', 'account/account' => 'account', 'information/contact' => 'contact', 'account/return/insert' => 'return', 'information/sitemap' => 'sitemap', ); /* SEO Custom URL */ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { $url_info = parse_url(str_replace('&amp;', '&', $link)); $url = ''; $data = array(); parse_str($url_info['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif ($key == 'path') { $categories = explode('_', $value); foreach ($categories as $category) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; } } unset($data[$key]); } /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query; } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?> не <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => '', 'checkout/cart' => 'cart', 'account/register' => 'register', 'account/wishlist' => 'wishlist', 'checkout/checkout' => 'checkout', 'account/login' => 'login', 'product/special' => 'special', 'affiliate/account' => 'affiliate', 'checkout/voucher' => 'voucher', 'product/manufacturer' => 'brand', 'account/newsletter' => 'newsletter', 'account/order' => 'order', 'account/account' => 'account', 'information/contact' => 'contact', 'account/return/insert' => 'return', 'information/sitemap' => 'sitemap', ); /* SEO Custom URL */ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { $url_info = parse_url(str_replace('&amp;', '&', $link)); $url = ''; $data = array(); parse_str($url_info['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif ($key == 'path') { $categories = explode('_', $value); foreach ($categories as $category) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; } } unset($data[$key]); } /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query; } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?> не <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => '', 'checkout/cart' => 'cart', 'account/register' => 'register', 'account/wishlist' => 'wishlist', 'checkout/checkout' => 'checkout', 'account/login' => 'login', 'product/special' => 'special', 'affiliate/account' => 'affiliate', 'checkout/voucher' => 'voucher', 'product/manufacturer' => 'brand', 'account/newsletter' => 'newsletter', 'account/order' => 'order', 'account/account' => 'account', 'information/contact' => 'contact', 'account/return/insert' => 'return', 'information/sitemap' => 'sitemap', ); /* SEO Custom URL */ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { $url_info = parse_url(str_replace('&amp;', '&', $link)); $url = ''; $data = array(); parse_str($url_info['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif ($key == 'path') { $categories = explode('_', $value); foreach ($categories as $category) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; } } unset($data[$key]); } /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query; } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?> не <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => '', 'checkout/cart' => 'cart', 'account/register' => 'register', 'account/wishlist' => 'wishlist', 'checkout/checkout' => 'checkout', 'account/login' => 'login', 'product/special' => 'special', 'affiliate/account' => 'affiliate', 'checkout/voucher' => 'voucher', 'product/manufacturer' => 'brand', 'account/newsletter' => 'newsletter', 'account/order' => 'order', 'account/account' => 'account', 'information/contact' => 'contact', 'account/return/insert' => 'return', 'information/sitemap' => 'sitemap', ); /* SEO Custom URL */ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { $url_info = parse_url(str_replace('&amp;', '&', $link)); $url = ''; $data = array(); parse_str($url_info['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif ($key == 'path') { $categories = explode('_', $value); foreach ($categories as $category) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; } } unset($data[$key]); } /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query; } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?> не <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => '', 'checkout/cart' => 'cart', 'account/register' => 'register', 'account/wishlist' => 'wishlist', 'checkout/checkout' => 'checkout', 'account/login' => 'login', 'product/special' => 'special', 'affiliate/account' => 'affiliate', 'checkout/voucher' => 'voucher', 'product/manufacturer' => 'brand', 'account/newsletter' => 'newsletter', 'account/order' => 'order', 'account/account' => 'account', 'information/contact' => 'contact', 'account/return/insert' => 'return', 'information/sitemap' => 'sitemap', ); /* SEO Custom URL */ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { $url_info = parse_url(str_replace('&amp;', '&', $link)); $url = ''; $data = array(); parse_str($url_info['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif ($key == 'path') { $categories = explode('_', $value); foreach ($categories as $category) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; } } unset($data[$key]); } /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query; } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?> 

Простым методом «без кода» является установка vQmod. Инструкции здесь: vQmod install wiki

А затем загрузите файл xml, доступный в этом разделе форума Opencart, в папку vqmod / xml /.

Xml содержит относительно легко читаемый скрипт, который отображает URL-адреса, аналогичные двум приведенным выше ответам, но без изменения файлов ядра. Поэтому обновления сайта не убьют его.

Поместите это в верхней части вашего файла index.php. Это было единственное решение, которое сработало для меня.

 switch($_SERVER["REQUEST_URI"]) { case '/old-url': $three01 = "/new-url"; break; } if($three01) { header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$three01); exit; } 

Файл vQmod xml

 <modification> <id>Seo All Alias</id> <version>1.0</version> <vqmver>2.1.7</vqmver> <author>noname</author> <file name="catalog/controller/common/seo_url.php"> <operation> <search position="after" offset="2"><![CDATA[ $this->request->get['route'] = 'information/information'; ]]></search> <add><![CDATA[ else { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($this->request->get['_route_']) . "'"); if ($query->num_rows) { $this->request->get['route'] = $query->row['query']; } } ]]></add> </operation> <operation> <search position="after" offset="1" index="2"><![CDATA[ unset($data[$key]); ]]></search> <add><![CDATA[ else { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($data['route']) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } ]]></add> </operation> </file> не <modification> <id>Seo All Alias</id> <version>1.0</version> <vqmver>2.1.7</vqmver> <author>noname</author> <file name="catalog/controller/common/seo_url.php"> <operation> <search position="after" offset="2"><![CDATA[ $this->request->get['route'] = 'information/information'; ]]></search> <add><![CDATA[ else { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($this->request->get['_route_']) . "'"); if ($query->num_rows) { $this->request->get['route'] = $query->row['query']; } } ]]></add> </operation> <operation> <search position="after" offset="1" index="2"><![CDATA[ unset($data[$key]); ]]></search> <add><![CDATA[ else { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($data['route']) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } ]]></add> </operation> </file> не <modification> <id>Seo All Alias</id> <version>1.0</version> <vqmver>2.1.7</vqmver> <author>noname</author> <file name="catalog/controller/common/seo_url.php"> <operation> <search position="after" offset="2"><![CDATA[ $this->request->get['route'] = 'information/information'; ]]></search> <add><![CDATA[ else { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($this->request->get['_route_']) . "'"); if ($query->num_rows) { $this->request->get['route'] = $query->row['query']; } } ]]></add> </operation> <operation> <search position="after" offset="1" index="2"><![CDATA[ unset($data[$key]); ]]></search> <add><![CDATA[ else { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($data['route']) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } ]]></add> </operation> </file> 

OpenCart SEO для OpenCart 1.5.X бесплатно 🙂

Вы можете использовать, как хотите. Название категории / ID / ID для более быстрого решения задач SEO

 <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => 'home', 'checkout/cart' => 'cart', 'account/register' => 'register', 'account/wishlist' => 'wishlist', 'checkout/checkout' => 'checkout', 'account/login' => 'login', 'product/special' => 'special', 'affiliate/account' => 'affiliate', 'checkout/voucher' => 'voucher', 'product/manufacturer' => 'brand', 'account/newsletter' => 'newsletter', 'account/order' => 'order', 'account/account' => 'account', 'information/contact' => 'contact', 'account/return/insert' => 'return/insert', 'information/sitemap' => 'sitemap', ); /* SEO Custom URL */ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); if ( count($parts) > 1 ) { if ($parts[1] == 'category'){ $this->request->get['path'] = $parts[2]; for ( $i = 3 ; $i < count($parts); $i++) { $this->request->get['path'] .= '_' . $parts[$i]; } }elseif( $parts[1] == 'item' ) { $this->request->get['product_id'] = $parts[2]; } } foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { if ($this->config->get('config_seo_url')) { $url_data = parse_url(str_replace('&amp;', '&', $link)); $url = ''; $data = array(); parse_str($url_data['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if ( (($data['route'] == 'product/manufacturer/product' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif( $key == 'product_id' ) { $url = '/shop/item/'.$value; unset($data[$key]); }elseif ($key == 'path') { $categories = explode('_', $value); $url = '/shop/category'; foreach ($categories as $category) { $url .= '/'.$category; } unset($data[$key]); }// /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_data['scheme'] . '://' . $url_data['host'] . (isset($url_data['port']) ? ':' . $url_data['port'] : '') . str_replace('/index.php', '', $url_data['path']) . $url . $query; } else { return $link; } } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?> не <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => 'home', 'checkout/cart' => 'cart', 'account/register' => 'register', 'account/wishlist' => 'wishlist', 'checkout/checkout' => 'checkout', 'account/login' => 'login', 'product/special' => 'special', 'affiliate/account' => 'affiliate', 'checkout/voucher' => 'voucher', 'product/manufacturer' => 'brand', 'account/newsletter' => 'newsletter', 'account/order' => 'order', 'account/account' => 'account', 'information/contact' => 'contact', 'account/return/insert' => 'return/insert', 'information/sitemap' => 'sitemap', ); /* SEO Custom URL */ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); if ( count($parts) > 1 ) { if ($parts[1] == 'category'){ $this->request->get['path'] = $parts[2]; for ( $i = 3 ; $i < count($parts); $i++) { $this->request->get['path'] .= '_' . $parts[$i]; } }elseif( $parts[1] == 'item' ) { $this->request->get['product_id'] = $parts[2]; } } foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { if ($this->config->get('config_seo_url')) { $url_data = parse_url(str_replace('&amp;', '&', $link)); $url = ''; $data = array(); parse_str($url_data['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if ( (($data['route'] == 'product/manufacturer/product' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif( $key == 'product_id' ) { $url = '/shop/item/'.$value; unset($data[$key]); }elseif ($key == 'path') { $categories = explode('_', $value); $url = '/shop/category'; foreach ($categories as $category) { $url .= '/'.$category; } unset($data[$key]); }// /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_data['scheme'] . '://' . $url_data['host'] . (isset($url_data['port']) ? ':' . $url_data['port'] : '') . str_replace('/index.php', '', $url_data['path']) . $url . $query; } else { return $link; } } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?> не <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => 'home', 'checkout/cart' => 'cart', 'account/register' => 'register', 'account/wishlist' => 'wishlist', 'checkout/checkout' => 'checkout', 'account/login' => 'login', 'product/special' => 'special', 'affiliate/account' => 'affiliate', 'checkout/voucher' => 'voucher', 'product/manufacturer' => 'brand', 'account/newsletter' => 'newsletter', 'account/order' => 'order', 'account/account' => 'account', 'information/contact' => 'contact', 'account/return/insert' => 'return/insert', 'information/sitemap' => 'sitemap', ); /* SEO Custom URL */ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); if ( count($parts) > 1 ) { if ($parts[1] == 'category'){ $this->request->get['path'] = $parts[2]; for ( $i = 3 ; $i < count($parts); $i++) { $this->request->get['path'] .= '_' . $parts[$i]; } }elseif( $parts[1] == 'item' ) { $this->request->get['product_id'] = $parts[2]; } } foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { if ($this->config->get('config_seo_url')) { $url_data = parse_url(str_replace('&amp;', '&', $link)); $url = ''; $data = array(); parse_str($url_data['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if ( (($data['route'] == 'product/manufacturer/product' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif( $key == 'product_id' ) { $url = '/shop/item/'.$value; unset($data[$key]); }elseif ($key == 'path') { $categories = explode('_', $value); $url = '/shop/category'; foreach ($categories as $category) { $url .= '/'.$category; } unset($data[$key]); }// /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_data['scheme'] . '://' . $url_data['host'] . (isset($url_data['port']) ? ':' . $url_data['port'] : '') . str_replace('/index.php', '', $url_data['path']) . $url . $query; } else { return $link; } } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?> не <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => 'home', 'checkout/cart' => 'cart', 'account/register' => 'register', 'account/wishlist' => 'wishlist', 'checkout/checkout' => 'checkout', 'account/login' => 'login', 'product/special' => 'special', 'affiliate/account' => 'affiliate', 'checkout/voucher' => 'voucher', 'product/manufacturer' => 'brand', 'account/newsletter' => 'newsletter', 'account/order' => 'order', 'account/account' => 'account', 'information/contact' => 'contact', 'account/return/insert' => 'return/insert', 'information/sitemap' => 'sitemap', ); /* SEO Custom URL */ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); if ( count($parts) > 1 ) { if ($parts[1] == 'category'){ $this->request->get['path'] = $parts[2]; for ( $i = 3 ; $i < count($parts); $i++) { $this->request->get['path'] .= '_' . $parts[$i]; } }elseif( $parts[1] == 'item' ) { $this->request->get['product_id'] = $parts[2]; } } foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { if ($this->config->get('config_seo_url')) { $url_data = parse_url(str_replace('&amp;', '&', $link)); $url = ''; $data = array(); parse_str($url_data['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if ( (($data['route'] == 'product/manufacturer/product' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif( $key == 'product_id' ) { $url = '/shop/item/'.$value; unset($data[$key]); }elseif ($key == 'path') { $categories = explode('_', $value); $url = '/shop/category'; foreach ($categories as $category) { $url .= '/'.$category; } unset($data[$key]); }// /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_data['scheme'] . '://' . $url_data['host'] . (isset($url_data['port']) ? ':' . $url_data['port'] : '') . str_replace('/index.php', '', $url_data['path']) . $url . $query; } else { return $link; } } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?> не <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => 'home', 'checkout/cart' => 'cart', 'account/register' => 'register', 'account/wishlist' => 'wishlist', 'checkout/checkout' => 'checkout', 'account/login' => 'login', 'product/special' => 'special', 'affiliate/account' => 'affiliate', 'checkout/voucher' => 'voucher', 'product/manufacturer' => 'brand', 'account/newsletter' => 'newsletter', 'account/order' => 'order', 'account/account' => 'account', 'information/contact' => 'contact', 'account/return/insert' => 'return/insert', 'information/sitemap' => 'sitemap', ); /* SEO Custom URL */ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); if ( count($parts) > 1 ) { if ($parts[1] == 'category'){ $this->request->get['path'] = $parts[2]; for ( $i = 3 ; $i < count($parts); $i++) { $this->request->get['path'] .= '_' . $parts[$i]; } }elseif( $parts[1] == 'item' ) { $this->request->get['product_id'] = $parts[2]; } } foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { if ($this->config->get('config_seo_url')) { $url_data = parse_url(str_replace('&amp;', '&', $link)); $url = ''; $data = array(); parse_str($url_data['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if ( (($data['route'] == 'product/manufacturer/product' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif( $key == 'product_id' ) { $url = '/shop/item/'.$value; unset($data[$key]); }elseif ($key == 'path') { $categories = explode('_', $value); $url = '/shop/category'; foreach ($categories as $category) { $url .= '/'.$category; } unset($data[$key]); }// /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_data['scheme'] . '://' . $url_data['host'] . (isset($url_data['port']) ? ':' . $url_data['port'] : '') . str_replace('/index.php', '', $url_data['path']) . $url . $query; } else { return $link; } } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?> не <?php class ControllerCommonSeoUrl extends Controller { /* SEO Custom URL */ private $url_list = array ( 'common/home' => 'home', 'checkout/cart' => 'cart', 'account/register' => 'register', 'account/wishlist' => 'wishlist', 'checkout/checkout' => 'checkout', 'account/login' => 'login', 'product/special' => 'special', 'affiliate/account' => 'affiliate', 'checkout/voucher' => 'voucher', 'product/manufacturer' => 'brand', 'account/newsletter' => 'newsletter', 'account/order' => 'order', 'account/account' => 'account', 'information/contact' => 'contact', 'account/return/insert' => 'return/insert', 'information/sitemap' => 'sitemap', ); /* SEO Custom URL */ public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); if ( count($parts) > 1 ) { if ($parts[1] == 'category'){ $this->request->get['path'] = $parts[2]; for ( $i = 3 ; $i < count($parts); $i++) { $this->request->get['path'] .= '_' . $parts[$i]; } }elseif( $parts[1] == 'item' ) { $this->request->get['product_id'] = $parts[2]; } } foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } /* SEO Custom URL */ if ( $_s = $this->setURL($this->request->get['_route_']) ) { $this->request->get['route'] = $_s; }/* SEO Custom URL */ if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { if ($this->config->get('config_seo_url')) { $url_data = parse_url(str_replace('&amp;', '&', $link)); $url = ''; $data = array(); parse_str($url_data['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if ( (($data['route'] == 'product/manufacturer/product' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); if ($query->num_rows) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif( $key == 'product_id' ) { $url = '/shop/item/'.$value; unset($data[$key]); }elseif ($key == 'path') { $categories = explode('_', $value); $url = '/shop/category'; foreach ($categories as $category) { $url .= '/'.$category; } unset($data[$key]); }// /* SEO Custom URL */ if( $_u = $this->getURL($data['route']) ){ $url .= $_u; unset($data[$key]); }/* SEO Custom URL */ } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . $key . '=' . $value; } if ($query) { $query = '?' . trim($query, '&'); } } return $url_data['scheme'] . '://' . $url_data['host'] . (isset($url_data['port']) ? ':' . $url_data['port'] : '') . str_replace('/index.php', '', $url_data['path']) . $url . $query; } else { return $link; } } else { return $link; } } /* SEO Custom URL */ public function getURL($route) { if( count($this->url_list) > 0) { foreach ($this->url_list as $key => $value) { if($route == $key) { return '/'.$value; } } } return false; } public function setURL($_route) { if( count($this->url_list) > 0 ){ foreach ($this->url_list as $key => $value) { if($_route == $value) { return $key; } } } return false; }/* SEO Custom URL */ } ?> 

В зависимости от уровня настройки, который вам нужен, есть несколько расширений, включая бесплатные.

Это работает как на OpenCart 1.5, так и на OpenCart 2 и кажется вполне настраиваемым. Однако он не поддерживает настройку жестко закодированных частей URL, таких как «checkout / cart» или «account / wishlist».

Вот vQmod для OpenCart 2.0 (может работать с 1.5, не тестировался), который применяется к предустановленному расширению и позволяет изменять эти жестко закодированные строки во все, что вы хотите, и поддерживать многоязычные веб-сайты.

Например, «checkout / cart» станет «cart» для английского, «panier» для французского и т. Д.