Не работает ЧПУ в новостях

Discussion in 'OpenCart' started by kuklev, May 13, 2013.

  1. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Joined:
    Jan 16, 2013
    Messages:
    1,000
    Likes Received:
    890
    Тут например фича для админки
    после нажатия кнопки System Cache весь кеш системы удалиться включая сео
     
  2. s7ranger

    s7ranger

    Joined:
    Oct 9, 2012
    Messages:
    73
    Likes Received:
    15
    А вообще на сколько важно ЧПУ для новостей?
     
  3. PapaLama

    PapaLama

    Joined:
    Apr 26, 2013
    Messages:
    27
    Likes Received:
    1
    Да простите просто тороплюсь, из за этого и наделал ошибок... сейчас все получилось все работает.
    Действительно надо просто терпение,все вернул на места теперь все заработало.
    Кстати нащёл платный модуль под названием "Модуль управления SeoPro". тут Он делает возможность всю работу проделать из админке простыми действиями, очень будет полезен для новичков как я ))
     
  4. Florenco

    Florenco

    Joined:
    Mar 3, 2013
    Messages:
    220
    Likes Received:
    102
    Там и бесплатный есть такой же, правда пока не тестировал его.
     
  5. craft37

    craft37

    Joined:
    Feb 2, 2013
    Messages:
    13
    Likes Received:
    0
     
  6. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Joined:
    Jan 16, 2013
    Messages:
    1,000
    Likes Received:
    890
    Florenco, прав на все 1000%
    Есть бесплатный модуль и он уже давно есть в отличии от етой ничем не отличающейся переделки от freelancerа на отличный доделанный costas ом модуль Yesvik который есть бесплатным!!!
    Ссылку я давал в первых сообщениях, видимо не заметили Вы, вот тут он
     
  7. Katrin123457

    Katrin123457

    Joined:
    Jul 1, 2014
    Messages:
    6
    Likes Received:
    0
    Доброе утро! Помогите пожалуйста у меня проблема с которой мучаюсь уже 2 недели!!! Не работает ЧПУ на новости index.php?route=information/news/info&news_id=2 все остальные ссылки на сайте работают! модуль easy_news_v1.0.
    ЧПУ в настройках включены. Высылаю сразу файл seo_url.php Прошу ВАС ПОМОГИТЕ!
    PHP:
    <?php
    class ControllerCommonSeoUrl extends Controller {
        private 
    $cache_data null;

        public function 
    __construct($registry) {
            
    parent::__construct($registry);
            
    $this->cache_data $this->cache->get('seo_url');
            if (!
    $this->cache_data) {
                
    $query $this->db->query("SELECT * FROM " DB_PREFIX "url_alias");

                
    $this->cache_data = array();
                foreach (
    $query->rows as $row) {
                    
    $this->cache_data['keywords'][$row['keyword']] = $row['query'];
                    
    $this->cache_data['queries'][$row['query']] = $row['keyword'];
                }
                
    $this->cache->set('seo_url'$this->cache_data);
            }
        }

        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_']);
    /** BEGIN PROCESSING TO DECORD REQUET SEO URL FOR PAVO BLOG MODULE **/
    $blogConfig $this->config->get('pavblog');
    $seo = isset($blogConfig['keyword_listing_blogs_page'])?trim($blogConfig['keyword_listing_blogs_page']):"blogs";
    if( 
    $this->request->get['_route_'] == $seo ){
    $this->request->get['route'] = 'pavblog/blogs';
    return 
    $this->forward($this->request->get['route']);
    /** END OF PROCESSING TO DECORD REQUET SEO URL FOR PAVO BLOG MODULE **/

                
    foreach ($parts as $part) {
                    if (isset(
    $this->cache_data['keywords'][$part])) {
                        
    $query $this->cache_data['keywords'][$part];
                        
    $url explode('='$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] == 'news_id') {
        
    $this->request->get['news_id'] = $url[1];
    }
                        if (
    $url[0] == 'information_id') {
    $this->request->get['information_id'] = $url[1];
    }
    /** BEGIN PROCESSING TO DECORD REQUET SEO URL FOR PAVO BLOG MODULE **/
    if( count($url) == && ( preg_match"#pavblog#"$url[0] )) ){
    $this->request->get['route'] = $url[0];
    $this->request->get['id'] = $url[1];
    /** END OF PROCESSING TO DECORD REQUET SEO URL FOR PAVO BLOG MODULE **/
                    
    } 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/product';
                } elseif (isset(
    $this->request->get['information_id'])) {
                    
    $this->request->get['route'] = 'information/information';
                } elseif (isset(
    $this->request->get['news_id'])) {
                    
    $this->request->get['route'] = 'news/news';
               }
    /* 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('&amp;''&'$link));
        
                
    $url '';
            
                
    $data = array();
            
                
    parse_str($url_data['query'], $data);
    ////////////        
                
    foreach ($data as $key => $value) {
                    if (isset(
    $data['route'])) {
                        if ((
    $data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/product' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id'))  {

                            if (isset(
    $this->cache_data['queries'][$key '=' . (int)$value])) {
                                
    $keyword $this->cache_data['queries'][$key '=' . (int)$value];
                                
    $url .= '/' $keyword;
                                unset(
    $data[$key]);
                            }
                        } elseif (
    $key == 'path') {
                            
    $categories explode('_'$value);
                        
                            foreach (
    $categories as $category) {
                                if (isset(
    $this->cache_data['queries']['category_id=' . (int)$category])) {
                                    
    $keyword $this->cache_data['queries']['category_id=' . (int)$category];
                                    
    $url .= '/' $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) {
                    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;
            }    
        } 
    }
    ?>
    Заранее спасибо!
     
    Lasted edited by : Dec 11, 2015
  8. Dotrox

    Dotrox Staff Member

    Joined:
    Nov 27, 2012
    Messages:
    3,198
    Likes Received:
    1,306
    Katrin123457, а какой модуль новостей вы используете?
    У вас в этом файле ожидается, что путь к новостям news/news, а он у вас на самом деле information/news, судя по вашей ссылке.

    Судя по файлу у вас ещё есть PAVO BLOG, почему вы не используете его?
     
  9. Katrin123457

    Katrin123457

    Joined:
    Jul 1, 2014
    Messages:
    6
    Likes Received:
    0
    PAVO BLOG там так же не генерируются ссылки...:((( С ним я тоже намучилась. Я к сожалению неопытный пользователь в этом вопросе :Smile: Но надо сделать, вот прошу у Вас помощи!
    Я как понимаю мне надо в этом файле поменять news/news на information/news, поменяла ссылка осталась та же.... Что можно сделать еще или я не правильно поняла?
     
  10. cereberlum

    cereberlum

    Joined:
    May 26, 2013
    Messages:
    756
    Likes Received:
    269
    А что если для работы чпу в PavBlog подключить его контроллер чпу? Насколько я помню у него есть свой контролер. Модуль новостей что вы тут рассматриваете я даже не пробовал, а вот блог как-то заставлял работать, помню только что были проблемы но как-то их решил. Итак 1) Назначить чпу блогу и записям 2)проверить доступность по ссылке чпу блога и информационного элемента (записи) - т.е. понятно что даже если ссылка формируется не чпу, то проверить вбив в адресной строке ЧПУ вариант и посмотреть работает или нет. 3)Если ЧПУ не работате попробовать подключить другой контроллер (это файл index.php в корне, кажется).
    4)если чпу работает, но ссылки формируются движком без ЧПУ, то будем думать дальше.
     
  11. Katrin123457

    Katrin123457

    Joined:
    Jul 1, 2014
    Messages:
    6
    Likes Received:
    0
    http://www.pavothemes.com/guides/pavblog/#setup-seo сделала рекомендации п.2 (не генерирует)
    стоит SEO Pack генерирует pavblog/category=28
    2)проверить доступность по ссылке чпу блога- запрашиваемая страница не найдена
    index.php

    пробовала внести изменения
    // SEO URL's
    $controller->addPreAction(new Action('common/seo_url'));
    заменила на
    // PAVO BLOG SEO URL's
    $controller->addPreAction(new Action('pavblog/seo')); // SEO URL's
    /* $controller->addPreAction(new Action('common/seo_url')); */


    ссылка не генерируется, и сбиваются остальные ссылки. т.е. выпалывает index.php?route=
    Что можно еще сделать?
     
    Lasted edited by : Dec 11, 2015
  12. cereberlum

    cereberlum

    Joined:
    May 26, 2013
    Messages:
    756
    Likes Received:
    269
    Увы, рекомендация по п.2 на деле и у меня не работала. А если попробовать перенаправить контроллер как в п.1 ? у меня в этом случае работал блог но не работали категории магазина. Насколько я помню, в итоге через паладин как-то замудрил, по крайней мере сайт где чпу в блоге работают у меня есть. По вашей ссылке еще вижу внизу запрос на создание полей, есть такие?
    Code:
    ALTER TABLE `oc_pavblog_blog` ADD `keyword` VARCHAR( 255 ) NOT NULL;'
    
    ALTER TABLE `oc_pavblog_category` ADD `keyword` VARCHAR( 255 ) NOT NULL;
     
  13. Rusik

    Rusik

    Joined:
    Jan 21, 2013
    Messages:
    166
    Likes Received:
    52
    Up.
    Есть нормальные модули со своим чпу или поддерживающие seopro?
     
  14. VaLeXaR

    VaLeXaR

    Joined:
    Mar 24, 2015
    Messages:
    61
    Likes Received:
    86
    Blog Manager нормально дружит со встроенным ЧПУ и SeoPro. Только для SeoPro в сети VQMOD нужно найти.
     
  15. DjKeng

    DjKeng

    Joined:
    Jan 23, 2016
    Messages:
    10
    Likes Received:
    0
    У меня наверно похожая проблема. Когда нажимаю на "О нас" при включенном ЧПУ, то направляет на товар. В Статье указан СЕО about, но внизу ссылка ведет на about_us. Как исправить?
     
  16. skiv14

    skiv14

    Joined:
    Jun 9, 2015
    Messages:
    437
    Likes Received:
    180
    DjKeng, как понять "В Статье указан СЕО about" ?
    Что указано в админке, статьи, о нас ? Что за чпу там ?
    Кэш чистили ?
     
  17. Dotrox

    Dotrox Staff Member

    Joined:
    Nov 27, 2012
    Messages:
    3,198
    Likes Received:
    1,306
    Похоже, у вас в футере ссылка не генерируется стандартными средствами, а вбита прямо в шаблон, потому SEO Url из настроек статьи и не подхватывается. Редактируйте footer.tpl вашего шаблона. Самый простой вариант - просто найти там эту ссылку и подправить, но лучше сделать её генерируемой (посмотрите, как выводятся другие ссылки).
     
  18. DjKeng

    DjKeng

    Joined:
    Jan 23, 2016
    Messages:
    10
    Likes Received:
    0
    Писал сообщение уже плохо соображая в запаре) Благодарю!
     
  19. Ваган

    Ваган

    Joined:
    Nov 8, 2013
    Messages:
    37
    Likes Received:
    1
    Всем здрасти.
    Будьте любезны, помогите разобраться с ошибкой:
    2016-05-11 9:39:52 - PHP Notice: Undefined index: in /home/a/arvaal/shop.arvaal.com/public_html/catalog/controller/common/seo_pro.php on line 55

    На 55 строке находится: $url = explode('=', $queries[$part], 2);
    Отрезок кода:
    PHP:
    if (count($rows) == sizeof($parts)) {
                    
    $queries = array();
                    foreach (
    $rows as $row) {
                        
    $queries[utf8_strtolower($row['keyword'])] = $row['query'];
                    }

                    
    reset($parts);
                    foreach (
    $parts as $part) {
                        
    $url explode('='$queries[$part], 2);

                        if (
    $url[0] == 'category_id') {
                            if (!isset(
    $this->request->get['path'])) {
                                
    $this->request->get['path'] = $url[1];
                            } else {
                                
    $this->request->get['path'] .= '_' $url[1];
                            }
                        } elseif (
    count($url) > 1) {
                            
    $this->request->get[$url[0]] = $url[1];
                        }
                    }
                } else {
                    
    $this->request->get['route'] = 'error/not_found';
                }
     
  20. Azazello77

    Azazello77

    Joined:
    Jun 13, 2015
    Messages:
    1
    Likes Received:
    0
    прошу помощи с урл модуля статей-новостей.

    страницы

    http://mimics.ru/index.php?route=news/article&news_id=16


    Файл catalog/controller/common/seo_url.php

    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_']);

                
    // remove any empty arrays from trailing
                
    if (utf8_strlen(end($parts)) == 0) {
                    
    array_pop($parts);
                }

                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];
                        }
                       
                        if (
    $query->row['query'] && $url[0] != 'information_id' && $url[0] != 'manufacturer_id' && $url[0] != 'category_id' && $url[0] != 'product_id') {
                            
    $this->request->get['route'] = $query->row['query'];
                        }
                    } else {
                        
    $this->request->get['route'] = 'error/not_found';

                        break;
                    }
                }

                if (!isset(
    $this->request->get['route'])) {
                    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 new 
    Action($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]);
                    }
                }
            }

            if (
    $url) {
                unset(
    $data['route']);

                
    $query '';

                if (
    $data) {
                    foreach (
    $data as $key => $value) {
                        
    $query .= '&' rawurlencode((string)$key) . '=' rawurlencode((string)$value);
                    }

                    if (
    $query) {
                        
    $query '?' str_replace('&''&amp;'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;
            }
        }
    }