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

Тема в разделе "OpenCart", создана пользователем kuklev, 13 май 2013.

  1. kuklev

    kuklev

    Регистрация:
    31 дек 2012
    Сообщения:
    147
    Симпатии:
    2
    Уважаемые форумчане!

    Не могу разобраться с ЧПУ в модуле новостей. (сам модуль брал отсюда http://fresh-warez.ru/skripty-i-cms/modul-novostej-news-module-dlya-opencart-v-1-5-1.html).

    В принципе все ЧПУ на сайте работают, активно этим пользуюсь. Но вот когда я его прописываю в этом модуле, ничего работать не хочет, а именно создают страницу вида
    http://benkoni.com/index.php?route=information/news&news_id=1
    Ничего не могу понять, что я сделал не так?
     
  2. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    kuklev, Файл catalog/controller/common/seo_url.php в сиудию, тогда помогу. Или catalog/controller/common/seo_pro.php, в зависимости от того какой мод используете
     
  3. kuklev

    kuklev

    Регистрация:
    31 дек 2012
    Сообщения:
    147
    Симпатии:
    2
     
  4. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    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] == 'news_id') {
    $this->request->get['news_id'] = $url[1];
    }
    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 {
    if (
    $parts[0] == 'news') {
        
    $this->request->get['route'] = 'information/news';
    } 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['news_id'])) {
    $this->request->get['route'] = 'information/news';
    } 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);
     
    if (
    $data['route'] == 'information/news' AND !isset($data['news_id'])) {
    $url .= '/' 'news';
    unset(
    $data['route']);
    }
     
    foreach (
    $data as $key => $value) {
    if (isset(
    $data['route'])) {
    if ((
    $data['route'] == 'information/news' && $key == 'news_id') || ($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]);
    }
    }
    }
     
    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;
    }
    }
    }
    ?> 
     
    kuklev нравится это.
  5. PapaLama

    PapaLama

    Регистрация:
    26 апр 2013
    Сообщения:
    27
    Симпатии:
    1
    может и мне поможите примерна та-же история Сделал все как сказано все работает и главная и товары и категории и статьи, но все равно остаются странички без чпу например карта сайта, производители и другие не редактируемые из админки страницы с путем типа /index.php?route=information/contact не пойму ( пользуюсь сео про

     
  6. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    PapaLama, Выполните запрос к БД
    PHP:
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('common/home''');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/wishlist''wishlist');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/account''my-account');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('checkout/cart''shopping-cart');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('checkout/checkout''checkout');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/login''login');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/logout''logout');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/order''order-history');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/newsletter''newsletter');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('product/special''specials');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('affiliate/account''affiliates');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('checkout/voucher''gift-vouchers');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('product/manufacturer''brands');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('information/contact''contact-us');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/return/insert''request-return');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('information/sitemap''sitemap');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/forgotten''forgot-password');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/download''downloads');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/return''returns');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/transaction''transactions');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/register''create-account');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('product/compare''compare-products');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('product/search''search');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/edit''edit-account');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/password''change-password');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/address''address-book');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('account/reward''reward-points');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('affiliate/edit''edit-affiliate-account');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('affiliate/password''change-affiliate-password');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('affiliate/payment''affiliate-payment-options');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('affiliate/tracking''affiliate-tracking-code');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('affiliate/transaction''affiliate-transactions');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('affiliate/logout''affiliate-logout');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('affiliate/forgotten''affiliate-forgot-password');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('affiliate/register''create-affiliate-account');
    INSERT INTO Префикс_БД_url_alias (querykeywordVALUES ('affiliate/login''affiliate-login');
    Где Префикс_БД_ ето префикс к БД(если его нет тогда просто удалите Префикс_БД_)

    Если нужно постоянно редактировать урл тогда установите етот модуль
     
  7. PapaLama

    PapaLama

    Регистрация:
    26 апр 2013
    Сообщения:
    27
    Симпатии:
    1
    Я понимаю что надо sql запрос в myphpadmin сделать, но не понятно как правильно его составить? Надо заменить всю строчку "Префикс_БД_url_alias" на то что у меня в базе прописано ? и где смотреть какой префикс и есть он или нет ?
    http://clip2net.com/s/53QrYO если таблица выглядит вот так то префикса нету ? он ведь должен стоять перед названием таблицы ?
     
  8. Florenco

    Florenco

    Регистрация:
    3 мар 2013
    Сообщения:
    220
    Симпатии:
    101
    У вас нет префикса.
    Строчки в запросе должны быть в виде:
    INSERT INTO url_alias (query, keyword) VALUES .........

    но насколько я помню, со стандартным seopro это работать не будет, нужно его модификацию ставить.
     
  9. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    Создайте файл в корне сайта например seo_url.php со следующим содержымым
    PHP:
    <?php

    require_once(dirname(__FILE__)."/config.php");
    require_once(
    DIR_SYSTEM 'startup.php');
    require_once(
    DIR_DATABASE 'mysql.php');
    $need_configs = array(
        
    'config_url',
        
    'config_ssl',
        
    'config_customer_group_id',
        
    'config_language'
    );

    $config = new Config();
    $db = new DB(DB_DRIVERDB_HOSTNAMEDB_USERNAMEDB_PASSWORDDB_DATABASE);


    $db->query("INSERT INTO `" DB_PREFIX "url_alias` (`query`, `keyword`) VALUES
        ('common/home', ''),
        ('account/wishlist', 'wishlist'),
        ('account/account', 'my-account'),
        ('checkout/cart', 'cart'),
        ('checkout/checkout', 'checkout'),
        ('account/login', 'login'),
        ('account/logout', 'logout'),
        ('account/order', 'order-history'),
        ('account/newsletter', 'newsletter'),
        ('product/special', 'specials'),
        ('affiliate/account', 'affiliates'),
        ('checkout/voucher', 'vouchers'),
        ('product/manufacturer', 'manufacturer'),
        ('information/contact', 'contact-us'),
        ('account/return/insert', 'request-return'),
        ('information/sitemap', 'sitemap'),
        ('account/forgotten', 'forgot-password'),
        ('account/download', 'downloads'),
        ('account/return', 'returns'),
        ('account/transaction', 'transactions'),
        ('account/register', 'register'),
        ('product/compare', 'compare'),
        ('product/search', 'search'),
        ('account/edit', 'edit-account'),
        ('account/password', 'change-password'),
        ('account/address', 'address-book'),
        ('account/reward', 'reward-points'),
        ('affiliate/edit', 'edit-affiliate-account'),
        ('affiliate/password', 'change-affiliate-password')"
    );
    ?>
    Сделано.
    Только пры условии что вы не устанавливали СЕО менеджер!

    Потом запустите его перейдя по ссылке ваш_домен/seo_url.php
     
  10. PapaLama

    PapaLama

    Регистрация:
    26 апр 2013
    Сообщения:
    27
    Симпатии:
    1
    это надо сделать вместо запросов в БД ? или надо сделать и то и то?
    Да стоит стандартная версия русского остора 1.5.4.1 со встроенным в него модулем seo pro, что лучше сделать может его вовсе отключить и сделать правки самостоятельно ? Или посоветуете новую версию сео про поставить ? или аналог ?
     
  11. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    Вот тут скачайте и замените только свой файл catalog/controller/common/seo_pro.php на новый
    И вместо запросов просто выполните скрипт
     
  12. PapaLama

    PapaLama

    Регистрация:
    26 апр 2013
    Сообщения:
    27
    Симпатии:
    1
    Получается вот так ( файл который вы дали от vqmod с расширением xml я переименовал и заменил (
     
  13. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    PapaLama, Сорри ссылка не та
    вопшем удалите вкмод тот что скачали его не надо
    вот тут смотрите
     
  14. PapaLama

    PapaLama

    Регистрация:
    26 апр 2013
    Сообщения:
    27
    Симпатии:
    1
    Да все заработало!! Супер!! только чертов сайтмап все равно перенаправляет на http://сайт.ru/index.php?route=feed/google_sitemap при том что прописано http://сайт.ru/sitemap везде (( не пойму где то ошибся или надо копать в другом месте (
     
  15. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    http://сайт.ru/sitemap ето визуальная карта сайта для пользователей
    а карта сайта для гугла и прочих
    http://сайт.ru/sitemap.xml
    Для етого
    В файле .htaccess
    PHP:
    RewriteRule ^sitemap.xmlindex.php?route=feed/google_sitemap [L]
    Ну и посмотрите ничего ли нет лишнего в директиве
     
  16. PapaLama

    PapaLama

    Регистрация:
    26 апр 2013
    Сообщения:
    27
    Симпатии:
    1
    Да прошу прощения не то что то получилось заработали только производители я на радостях уже думал все окей ( вставлял файл сео про из предложенного вами не внося изменений в БД (.
    прописано но так понимаю по смыслу для гугла а может лучше поменять для всех поисковиков путь на http://сайт.ru/sitemap.xml как это прописывается?
    Да просто висел кэш теперь стали работать другие изменения которые я вносил в БД, остается вопрос с правильным путем к http://сайт.ru/sitemap.xml для робота яндекса и прочее.
     
  17. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    1) заменить скачаный сео про на родной
    2) запустить скрипт
    3) удалить сео кеш
     
  18. PapaLama

    PapaLama

    Регистрация:
    26 апр 2013
    Сообщения:
    27
    Симпатии:
    1

    Да пришлось так и сделать(. Получилось сделать все урл на сайте чпу но при этом вновь добавленные товары перестали делаться с чпу урлом, вернул на сайт старый seo_pro.php все урл всяких личных кабинетов и тп окракозябрились, зато новые товары приобрели нормальный вид... получаеться либо так либо так ?
     
  19. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    Нет, получается не так и не так, а получается что советов не читали а делали по своему!
    Могу только предположить что вы скачали кешырованый сео про и после добавления товара страница была не найдена потому что в кеш ее еще не было, для етого нужно чистить кеш
    Полно статей на форуме по поводу избавления rout вот только читать всем нет смысла....
     
    PapaLama нравится это.
  20. Florenco

    Florenco

    Регистрация:
    3 мар 2013
    Сообщения:
    220
    Симпатии:
    101
    После создания новых позиций, seourl обновится в течение часа. Где-то видел решение, чтобы кеш сразу скидывался при создании новых seourl.
     
    PapaLama нравится это.