(РЕШЕНО) Создание новых url-адресов в Seo_url

Тема в разделе "Общие вопросы", создана пользователем RoS, 1 авг 2015.

  1. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Здравствуйте.
    Версия OC: Русская сборка OpenCart 2.0.3.1 rs2 (без доп. модулей)

    Продублировал каталог для админки и для сайта и привязал к новым идентичным по структуре таблице БД. В итоге получил рабочий второй каталог (который лежит в новой папке с похожими переменными). Проблема возникла когда начал настраивать seo_url.php для второго каталога. Не получается превести в нужный вид, как первый каталог работает нужным образом!

    Вот что получаю при переходе в Категорию (2 каталога):
    http:// SITE. UA/index.php?route=newproduct/newcategory&path=34_43
    Место:
    http:// SITE. UA/catalog2

    При переходе в Товар (2 каталога):
    http:// SITE. UA/tovar2
    Место:
    http:// SITE. UA/catalog2/tovar2

    1. Переменную "path" в файлах НЕ ИЗМЕНЯЛ
    2. Все seo_url хранятся в таблице oc_url_alias

    PS. Если в файле seo_url.php удалить эту строку (отвечает за 1 каталог):

    elseif (isset($this->request->get['path'])) {
    $this->request->get['route'] = 'product/category';
    }


    То для 2-го Каталога путь становится: http:// SITE. UA/catalog2/tovar2 (как нужно)
    Но... у 1-го Каталога ЧПУ пропадает

    РЕШИЛ! НАШЕЛ ПОХОЖУЮ СИТУАЦИЮ В ГОТОВЫХ МОДУЛЯХ
     
    Последнее редактирование: 1 авг 2015
  2. my2you

    my2you Продвинутый пользователь

    Сообщения:
    281
    Симпатии:
    125
    А рассказать как решили??

    И расскажите пожалуйста подробнее, что вы хотели решить данными методами... очень интересно.
     
  3. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Добавление будет для страниц товара, категорий и производителя.

    Переменные:
    • newproduct
    • newcategory
    • newmanufacturer
    • newmanufacturer_id
    • newcategory_id
    • newproduct_id
    • npath
    Могут отличаться от ваших!!!

    Все изменения для файла catalog/controller/common/seo_url.php

    1.Находим:
    PHP:
    $url explode('='$query->row['query']);
    Ниже добавляем:
    PHP:
    if ($url[0] == 'newproduct_id') {
        
    $this->request->get['newproduct_id'] = $url[1];
    }
    if (
    $url[0] == 'newcategory_id') {
        if (!isset(
    $this->request->get['npath'])) {
            
    $this->request->get['npath'] = $url[1];
        } else {
            
    $this->request->get['npath'] .= '_' $url[1];
        }
    }
    if (
    $url[0] == 'newmanufacturer_id') {
        
    $this->request->get['newmanufacturer_id'] = $url[1];
    }
    2.Находим:
    PHP:
    if ($query->row['query'] && $url[0] != 'information_id' && $url[0] != 'manufacturer_id' && $url[0] != 'category_id' && $url[0] != 'product_id') {
    И добавляем в нее:
    PHP:
    && $url[0] != 'newmanufacturer_id' && $url[0] != 'newcategory_id' && $url[0] != 'newproduct_id'
    Вот что получаем:
    PHP:
    if ($query->row['query'] && $url[0] != 'information_id' && $url[0] != 'manufacturer_id' && $url[0] != 'category_id' && $url[0] != 'product_id' && $url[0] != 'newmanufacturer_id' && $url[0] != 'newcategory_id' && $url[0] != 'newproduct_id') {
    3.Находим условие " if (!isset($this->request->get['route'])) { " и в ней:
    PHP:
    } elseif (isset($this->request->get['information_id'])) {
        
    $this->request->get['route'] = 'information/information';
    }
    После закрывающей скобки "}" добавляем:
    PHP:
    elseif (isset($this->request->get['newproduct_id'])) {
        
    $this->request->get['route'] = 'newproduct/newproduct';
    } elseif (isset(
    $this->request->get['npath'])) {
        
    $this->request->get['route'] = 'newproduct/newcategory';
    }elseif (isset(
    $this->request->get['manufacturer_id'])) {
        
    $this->request->get['route'] = 'newproduct/newmanufacturer/info';
    }
    4.Находим:
    PHP:
    } elseif ($this->request->get['route'] == 'common/home') {
        
    $arg HTTP_SERVER;
    }
    Также после закрывающей скобки "}" добавляем:
    PHP:
    elseif ($this->request->get['route'] == 'newproduct/newproduct' && isset($this->request->get['newproduct_id'])) {
        
    $this->request->get['route'] = 'newproduct_id=' $this->request->get['newproduct_id'];
    } elseif (
    $this->request->get['route'] == 'newproduct/newmanufacturer/info' && isset($this->request->get['newmanufacturer_id'])) {
        
    $this->request->get['route'] = 'newmanufacturer_id=' $this->request->get['newmanufacturer_id'];
    } elseif (
    $this->request->get['route'] == 'newproduct/newcategory' && isset($this->request->get['npath'])) {
        
    $newcategorys_id explode('_'$this->request->get['npath']);
        
    $cat_path '';
        foreach (
    $newcategorys_id as $newcategory_id) {
            
    $query $this->db->query("SELECT * FROM " DB_PREFIX "url_alias WHERE `query` = 'newcategory_id=" . (int)$newcategory_id "'");
            if (
    $query->num_rows && $query->row['keyword'/**/ ) {
                
    $cat_path .= '/' $query->row['keyword'];
            } else {
                
    $cat_path false;
                break;
            }
        }
        
    $arg trim($cat_path'/');
    }
    5. Находим:
    PHP:
    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')) {
    Заменяем на:
    PHP:
    if (($data['route'] == 'product/product' && $key == 'product_id') || ($data['route'] == 'newproduct/newproduct' && $key == 'newproduct_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || (($data['route'] == 'newproduct/newmanufacturer/info' || $data['route'] == 'newproduct/newproduct') && $key == 'newmanufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) {
    6.Находим:
    PHP:
    } elseif ($key == 'path') {    
    Заменяем на:
    PHP:
    } elseif ($key == 'path' || $key == 'npath') {
    7.Находим:
    PHP:
    $query $this->db->query("SELECT * FROM " DB_PREFIX "url_alias WHERE `query` = 'category_id=" . (int)$category "'");
    Заменяем на:
    PHP:
    if($key == 'path') {
        
    $query $this->db->query("SELECT * FROM " DB_PREFIX "url_alias WHERE `query` = 'category_id=" . (int)$category "'");
    }
    if(
    $key == 'npath') {
        
    $query $this->db->query("SELECT * FROM " DB_PREFIX "url_alias WHERE `query` = 'newcategory_id=" . (int)$category "'");
    }
    Изменения для файлов:
    catalog/controller/newproduct/newproduct.php
    catalog/controller/newproduct/newcategory.php
    catalog/controller/common/header.php


    newcategory.php

    Изменяем в файле все:

    PHP:
    path

    на
    PHP:
    npath

    Для newproduct.php проделываем тоже самое что делали с newcategory.php

    НЕ ПУТАТЬ "path" с "path_id" !!!!!!!!

    header.php

    В этом файле при дублировании горизонтального меню, вносим изменения в эту строчку:
    PHP:
    'href'     => $this->url->link('product/category''path=' $category['category_id'])
    на
    PHP:
    'href'     => $this->url->link('product/category''npath=' $category['category_id'])
    и также измененяем эту:
    PHP:
    'href'  => $this->url->link('product/category''path=' $category['category_id'] . '_' $child['category_id'])
    на
    PHP:
    'href'  => $this->url->link('product/category''npath=' $category['category_id'] . '_' $child['category_id'])
     
    Последнее редактирование: 7 авг 2015
    Romans, Ravilr, my2you и ещё 1-му нравится это.
  4. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    @RoS мне тоже интересно основная идея решения какая?
    Т.е вы создали новые контролы и модели и таблицы в БД для страниц товара, категорий и производителя.
    В итоге вы получили новую админку итд. Но зачем все это? Ведь можно было наверно на мультимагазине все сделать или через подпапку.
    Расскажите, интересно очень..
     
  5. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Здравствуйте, я получил не новую админку, а новый пункт меню "Каталог2". В которой находится:
    • "Категории2"
    • "Товары2"
    • "Производители2"
    • "Атрибуты2"
    • "Отзывы2"
    Первый каталог будет работать для продажи со своим дизайном.
    Второй каталог буду видоизменять.
    Например можно получить каталог новостей, галерею но со своим функционалом.
    Т.к. предложенные варианты тех же "Новостей" меня не устраивают категорически.
     
  6. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Все понял. Вы задублировали функционал страниц товара, категорий и производителя чтобы на основе их создать что то свое.
    Теперь все понятно, СПАСИБО.