Активный пункт меню, отдельный шаблон итд [Вопросы]

Тема в разделе "Обо всём", создана пользователем solunski.d, 5 июл 2015.

  1. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    Здравствуйте, у меня вопрос по поводу активного пункта меню, я сделал на основе модуля "Категории", на движке версии 2.0.X.
    Проблема в том что, создавая категорию, ввести в поле seo например такой путь: index.php?route=common/home
    он не присваивает класс к пункту меню, а если ввести просто home тогда все работает, на данный момент решил проблему javascriptom. Но мне нужен универсальный метод, чтобы работал на php, ибо клиент, будет потом по мозгам ездить.
    Подскажите пожалуйста, как решить данную проблему.
     
  2. Ravilr

    Ravilr Специалист

    Сообщения:
    3.863
    Симпатии:
    1.059
    Если вы про категории в шапке, то решение тут http://forum.opencart-russia.ru/threads/aktivnyj-punkt-v-glavnom-menju.459/

    А если вы все же про модуль категорий, то тогда не понятно зачем вы присваиваете в сео урль путь к конролеру?
    Или вам просто нужна первая категория как ссылка на главную?
    Для размещение ссылки на главной, посмотрите пример из контролера header , а именно так
    PHP:
    $this->url->link('common/home')
    А проверку на текущей роут в модуле категорий проверяйте как
    PHP:
     if ($this->request->get['route'] == 'common/home') {
     
  3. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    Я посмотрел как сделано в модуле Категорий, и сделал то же самое для меню в шапке, все работает, но если указать путь до контролера, то увы не работает.
    У меня почти все категории обращаться к контроллеру, ибо сам шаблон очень специфичен. Чтобы лишний раз не выводилось "у вас в категориях нету товара", я создал дополнительные странички и указал в категориях путь до контроллера. Если зайти в дебагер и посмотреть ссылку пункта, то она будет выглядеть примерно так, index.php?route=page/delivery, но мне это не нрава, поэтому иду в папку ../system/library/response.php, нахожу функцию public function output() и добавляю код:
    Код:
    if (!defined('HTTP_CATALOG')) $this->output = str_replace('index.php?route=page/delivery', 'delivery', $this->output);
    Так же правлю в базе данных таблицу URL_ALIAS Mysql запросом:
    Код:
    INSERT INTO oc_url_alias (query, keyword) VALUES ('index.php?route=page/delivery', 'delivery');
    После этого ссылка в дебагере выглядит красиво и страничка открывается.
    Только вот не пойму почему пункт меню не робит.
    Таким хитрым методом, а может и геморным все работает, кроме активного пункта, самоучка, ток что строго не судите :D. Я специально провел исследование, сделал обычную категорию, сделал так чтобы в к пунктам меню добавлялся класс с id категории, к списку, А также просто вывел через echo идентификатор категорий, то есть category_id. Категории с обычными Seo, типа "product", echo выводит правильный идентификатор, проверил класс который присвоился, все верно. А теперь самое интересное, сделал в пункте меню обращение к контролеру типа index.php?route=page/delivery, посмотрел в дебагере, что id который присвоился к списку верный, НО, при переходе на страницу, echo выводит id = 0, а класс как был, так и не изменился. Не могу понять почему.
     
    Последнее редактирование: 5 июл 2015
  4. Ravilr

    Ravilr Специалист

    Сообщения:
    3.863
    Симпатии:
    1.059
    Если вы делаете для верхнего меню, то почему не устроил вариант предложенный выше?

    это еще зачем??

    Вы все таки запутались в своих действиях и чувствую решаете простую задачу, сложными методами.

    1. Если вы хотите в категории пустой, вывести другой шаблон, то почему бы не сделать проверку в контроллере категорий и если массив пустой $data['products'] то просто подключать другой шаблон?

    2. Для активного пункта меню сео урль вообще роли никакой не играет т.к сравнение идет по id категориям, а не их адресу
     
  5. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    public function output() - я нашел на одном сайте решение как убрать index.php?route=common/home на пустую строку.
    Ибо тогда еще не было хорошего модуля seo.
    В PHP я особо не силен, ток что жду объяснения на пальцах :D SORRY)))
     
  6. Ravilr

    Ravilr Специалист

    Сообщения:
    3.863
    Симпатии:
    1.059
    А может вам и не нужен другой шаблон. Что вы хотите вывести когда нет товара в категории?
     
  7. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    У меня проблема в том что, почти каждая страница имеет свой шаблон. Поэтому я создал в папке Catalog контроллер каждого шаблона и tpl. Зашел в Настройки => Дизайн => Схема. Добавляю новую схему с название и указываю путь до контроллера.
    К Категории присваиваю схему и указываю в seo ссылку на контроллер.
     
  8. Ravilr

    Ravilr Специалист

    Сообщения:
    3.863
    Симпатии:
    1.059
    o_O это как?? Ничего не путаете.

    Вы так и не ответили на вопрос. Ато я уже логическую связь вопроса начинаю терять ))
     
  9. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    index.php?route=common/home - это ссылка, она обращается к контролеру шаблона home, если в seo вставить то будет работать)))
    Я вообще не вывожу в категории товары, только через модуль карусель, их всего 8.
    У меня например есть пункт меню с названием "Доставка" при заходе, человек попадает как на статью.
    У каждого пункта меню свой шаблон, вот поэтому я так и делал.
     
  10. Ravilr

    Ravilr Специалист

    Сообщения:
    3.863
    Симпатии:
    1.059
  11. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    Я понимаю, но другого варианта я не знал. А как тогда сделать правильно?
     
  12. Ravilr

    Ravilr Специалист

    Сообщения:
    3.863
    Симпатии:
    1.059
    А зачем вы использовали поле не по назначению?
     
  13. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    Чтобы перейти на другой шаблон, а с помощью вашего seo контроллера подправить ссылку контролера
    Ведь раньше когда щелкал на логотип, он переходил на главную, но в url адресе указывался контролер, а ваша сборка решает данную проблему.
     
  14. Ravilr

    Ravilr Специалист

    Сообщения:
    3.863
    Симпатии:
    1.059
    Для того чтобы перейти на другой шаблон, не надо переходить по непонятным ссылка, достаточно в контроллере нужного модуля (в вашем случае наверно контроллер категории) указать нужный шаблон.
     
  15. Ravilr

    Ravilr Специалист

    Сообщения:
    3.863
    Симпатии:
    1.059
    вот в контроллере есть код
    PHP:
          if (file_exists(DIR_TEMPLATE $this->config->get('config_template') . '/template/product/category.tpl')) {
             
    $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/product/category.tpl'$data));
           } else {
             
    $this->response->setOutput($this->load->view('default/template/product/category.tpl'$data));
          }
    измените category.tpl на переменную. А потом в переменную присваиваете свой шаблон на основании каких нибудь входящих данных.
     
    solunski.d нравится это.
  16. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    У меня штук 7 пунктов меню в шапке и у каждой страницы должен быть свой шаблон.
    Category_id подойдет для сравнения?
    Приведите пожалуйста пример присваивания, ибо я говорил новичок в PHP(((
     
  17. Ravilr

    Ravilr Специалист

    Сообщения:
    3.863
    Симпатии:
    1.059
    А я думал что хоть что то знаете... вроде писали как знайка...

    Выше указанный код, заменить на ниже указанный. Циферки это ид категории.
    PHP:
                $template 'category.tpl';
                if (
    $category_id == 27) {    $template 'category1.tpl';    }
                if (
    $category_id == 28) {    $template 'category2.tpl';    }
                       
                if (
    file_exists(DIR_TEMPLATE $this->config->get('config_template') . '/template/product/'.$template)) {
                    
    $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/product/'.$template$data));
                } else {
                    
    $this->response->setOutput($this->load->view('default/template/product/'.$template$data));
                }
     
    Bkmz и solunski.d нравится это.
  18. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    Я еще дурак, я не давно закончил курсы. Причем получил только базовые знания, я еще развиваюсь))) Но уже были реальные заказы, поэтому я копался в коде, сносил движок, заново ставил, я идеалист люблю все делать правильно, повторял одно действие раз 10, вот так я за короткий промежуток времени и googla стал стремительно развиваться, мог прогуливать школу :D ибо хотел знать как и что работает.
    У меня слабая логика, но зрительная память очень мощная, поэтому мне по сути программирование сложнее понимать чем вам.
     
  19. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.569
    Симпатии:
    432
    А реально условие простое, тогда у меня еще вопрос, зачем в схемах, можно указать путь на контролер, для чего он служит?
     
  20. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    Модули размещаются на Макетах. Макеты привязаны к пути контроллера. Так зачем .... )))