Opencart - Настраиваем Seo Urls Для Страниц Магазина (чпу В Opencart)

Тема в разделе "SEO-вопросы (оптимизация и продвижение магазина)", создана пользователем admin, 18 июн 2016.

  1. TopicStarter Overlay
    Online

    admin Команда форума Администратор

    Сообщения:
    2.321
    Симпатии:
    76.737
    Репутация:
    170
    4ef736ea3afb9e9e4ec7ce6758ca76d9.jpg
    Некоторые страницы не обретают красивый вид, даже при включении режима ЧПУ (Обычного или Seo Pro)

    Я использую Обычный режим ЧПУ, потому что устанавливал модуль блог и для него вносил правки в файл /catalog/controller/common/seo_url.php (можно по аналогии это делать и для seo_pro.php). Снова лезем в этот файл и вносим дополнения в пару мест.

    Например в стандартном режиме ЧПУ осталась ссылка http://example.com/index.php?route=checkout/cart надо же её привести к виду http://example.com/cart. В catalog/controller/common/seo_url.php вносим следующий код:

    Код:
    if (isset($this->request->get['record_id'])) {
    $this->request->get['route'] = 'record/record';
    } elseif (isset($this->request->get['blog_id'])) {
    $this->request->get['route'] = 'record/blog';
    }
    
    /* SEO Custom URL 1 */
    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'];
                    }
               }
    /* SEO Custom URL 1 */
    
    
    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('&', '&', $link));
    и здесь:

    Код:
    if (($data['route'] == 'record/record' && $key == 'record_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 == 'blog_id') {
    $categories = explode('_', $value);
    
    foreach ($categories as $category) {
    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'blog_id=" . (int)$category . "'");
    
    if ($query->num_rows) {
    $url .= '/' . $query->row['keyword'];
    }
    }
    
    unset($data[$key]);
    }
    
    /* SEO Custom URL 2 */
    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]);
                            }
                       }
    /* SEO Custom URL 2 */
    
    }
    
    }
    
    if ($url) {
    //echo $url."<br>";
    unset($data['route']);
    Первая правка касается index() функции, чтобы она смотрела в таблицу url_alias на совпадении url в адресной строке и роута $this->request->get['_route_'].

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


    Теперь осталось добавить необходимые url в таблицу url_alias:

    Код:
    /*INSERT INTO `url_alias`(`url_alias_id`,`query`,`keyword`) VALUES
    (NULL,'checkout/cart','cart');*/
    INSERT INTO url_alias (query, keyword) VALUES ('common/home', '');
    INSERT INTO url_alias (query, keyword) VALUES ('account/wishlist', 'wishlist');
    INSERT INTO url_alias (query, keyword) VALUES ('account/account', 'my-account');
    INSERT INTO url_alias (query, keyword) VALUES ('checkout/cart', 'cart');
    INSERT INTO url_alias (query, keyword) VALUES ('checkout/checkout', 'checkout');
    INSERT INTO url_alias (query, keyword) VALUES ('account/login', 'login');
    INSERT INTO url_alias (query, keyword) VALUES ('account/logout', 'logout');
    INSERT INTO url_alias (query, keyword) VALUES ('account/order', 'order-history');
    INSERT INTO url_alias (query, keyword) VALUES ('account/newsletter', 'newsletter');
    INSERT INTO url_alias (query, keyword) VALUES ('product/special', 'specials');
    INSERT INTO url_alias (query, keyword) VALUES ('affiliate/account', 'affiliates');
    INSERT INTO url_alias (query, keyword) VALUES ('checkout/voucher', 'gift-vouchers');
    INSERT INTO url_alias (query, keyword) VALUES ('product/manufacturer', 'brands');
    INSERT INTO url_alias (query, keyword) VALUES ('information/contact', 'contact-us');
    INSERT INTO url_alias (query, keyword) VALUES ('account/return/insert', 'request-return');
    INSERT INTO url_alias (query, keyword) VALUES ('information/sitemap', 'sitemap');
    INSERT INTO url_alias (query, keyword) VALUES ('account/forgotten', 'forgot-password');
    INSERT INTO url_alias (query, keyword) VALUES ('account/download', 'downloads');
    INSERT INTO url_alias (query, keyword) VALUES ('account/return', 'returns');
    INSERT INTO url_alias (query, keyword) VALUES ('account/transaction', 'transactions');
    INSERT INTO url_alias (query, keyword) VALUES ('account/register', 'create-account');
    INSERT INTO url_alias (query, keyword) VALUES ('product/compare', 'compare-products');
    INSERT INTO url_alias (query, keyword) VALUES ('product/search', 'search');
    INSERT INTO url_alias (query, keyword) VALUES ('account/edit', 'edit-account');
    INSERT INTO url_alias (query, keyword) VALUES ('account/password', 'change-password');
    INSERT INTO url_alias (query, keyword) VALUES ('account/address', 'address-book');
    INSERT INTO url_alias (query, keyword) VALUES ('account/reward', 'reward-points');
    INSERT INTO url_alias (query, keyword) VALUES ('affiliate/edit', 'edit-affiliate-account');
    INSERT INTO url_alias (query, keyword) VALUES ('affiliate/password', 'change-affiliate-password');
    INSERT INTO url_alias (query, keyword) VALUES ('affiliate/payment', 'affiliate-payment-options');
    INSERT INTO url_alias (query, keyword) VALUES ('affiliate/tracking', 'affiliate-tracking-code');
    INSERT INTO url_alias (query, keyword) VALUES ('affiliate/transaction', 'affiliate-transactions');
    INSERT INTO url_alias (query, keyword) VALUES ('affiliate/logout', 'affiliate-logout');
    INSERT INTO url_alias (query, keyword) VALUES ('affiliate/forgotten', 'affiliate-forgot-password');
    INSERT INTO url_alias (query, keyword) VALUES ('affiliate/register', 'create-affiliate-account');
    INSERT INTO url_alias (query, keyword) VALUES ('affiliate/login', 'affiliate-login');
    Вот. http://example.com/cart должен возвращать то же что и http://example.com/index.php?route=checkout/cart, а OpenCart узнаёт $this->url->link('checkout/cart'); и возвращает ссылку в красивом виде http://example.com/cart