[Решено] сео чпу в opencart 1.5.6.3

Тема в разделе "OpenCart", создана пользователем Liza, 22 июн 2015.

Статус темы:
Закрыта.
  1. Liza

    Liza

    Регистрация:
    1 мар 2015
    Сообщения:
    61
    Симпатии:
    1
    после настройки чпу на сайте http://beisbolochka.in.ua/ при нажатии на ссылки http://beisbolochka.in.ua/checkout и http://beisbolochka.in.ua/cart не открывается корзина и не открывается форма оформления заказа, ссылки стали вести на главную, это произошло после того как я поменяла seo_url.php
    Код:
    <?php
    class ControllerCommonSeoUrl extends Controller {
        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';   
                    }
                }
               
                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 && $query->row['keyword']) {
                $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 && $query->row['keyword']) {
                    $url .= '/' . $query->row['keyword'];
                } else {
                    $url = '';
                    break;
                }
            }
            unset($data[$key]);
        }else{
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($value) . "'");
            if (($query->num_rows && $query->row['keyword']) or $value == 'common/home') {
                $url .= '/' . $query->row['keyword'];
                unset($data[$key]);
            }
        }
    }
            }
       
            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;
            }
        }   
    }
    ?>
    а также сделала запрос в базу данных
    Код:
    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');
    
    только перед url_alias у меня был префикс oc
    что я делаю не так, подскажите в чем ошибка
    http://beisbolochka.in.ua/index.php?route=information/information&information_id=6 ссылка доставки так и не преобразилась
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.038
    Симпатии:
    774
    Что именно вы в нём поменяли и зачем?
    Вообще, лучше использовать seo_pro.


    А вы вписали SEO Url для этой страницы? ОпенКарт не умеет сам генерировать ЧПУ.
     
  3. Liza

    Liza

    Регистрация:
    1 мар 2015
    Сообщения:
    61
    Симпатии:
    1
    а куда именно вписывать сео урл, подскажите пожалуйста путь)
    --- Добавлено, 23 июн 2015 ---
    https://opencartforum.com/topic/10270-дубли-страниц-seopro/ сео про отсюда вставлять?)
    --- Добавлено, 23 июн 2015 ---
    ссылки все прописались, но почему-то корзина и оформление заказа все так же на главную перенаправляет, в чем может быть проблема?)
     
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.038
    Симпатии:
    774
    Откройте в админке редактирование статьи, посмотрите вкладку Данные. Там есть поле "SEO URL". Туда и вписывайте транслитом ЧПУ для этой страницы.
    Если сразу после этого ссылка не станет ЧПУ, почистите кеш ОпенКарта.



    Да, можно оттуда. Только учтите, что там всё для сборки ocStore, а у вас оригинальный ОпенКарт. Потому советую просто взять оттуда файл seo_pro.php, закинуть его в /catalog/controller/common/ и в файле index.php найти строчку
    PHP:
    $controller->addPreAction(new Action('common/seo_url'));
    и заменить в ней seo_url на seo_pro.

    Для начала подключите seo_pro.
     
  5. Liza

    Liza

    Регистрация:
    1 мар 2015
    Сообщения:
    61
    Симпатии:
    1
    проблема с оформлением заказа и корзиной решена, теперь не добавляется товар со страницы продуктов, в то время как со страницы категорий и главной добавляется)
     
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.038
    Симпатии:
    774
    Не добавляется потому, что на странице товара отдельный код обработки клика по кнопке купить и в нём неправильная ссылка.
    Найдите в product.tpl строчку
    Код:
    url: 'index.php?route=checkout/cart/update',
    и замените в ней update на add.
     
Статус темы:
Закрыта.