[Помогите] Вывод модуля в отдельной статье

Тема в разделе "OpenCart", создана пользователем Serkist, 20 ноя 2013.

  1. Serkist

    Serkist

    Регистрация:
    8 фев 2013
    Сообщения:
    367
    Симпатии:
    75
    Всем привет.
    Подскажите, пожалуйста, как вывести модуль (например мы вк) на отдельной странице (статье).
    Пробовал создавать схему отдельную вида information/information&information_id=8 - модуль не выводится.
    Пробовал скопировать information.tpl и создать information2.tpl и аналогично с information.php (для создания макета information/information2), но в php файле еще менял значения information/information на information/information2
    Но почему то при переходе на страницу
    index.php?route=information/information2&information_id=8
    выдает пустую страницу

    Есть еще идеи?
     
  2. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Схемы дублировать нельзя.

    Если нужно вывести модуль только для конкретной статьи, назначте его для схемы статей, а в самом модуле проверяйте id статьи:
    PHP:
    if (!isset($this->request->get['information_id']) || $this->request->get['information_id'] != 111){
    return 
    false;
    }
    Этот код нужно разместить после декларации функции index в контроллере модуля. Если при проверки окажется, что это не страница конкретной статьи или что id статьи не соответствует указанному (нужно заменить 111 на id статьи, где нужно вывести модуль) - модуль выводиться не будет.
     
    Allaur и Serkist нравится это.
  3. kolich85

    kolich85

    Регистрация:
    19 сен 2013
    Сообщения:
    164
    Симпатии:
    93
    У меня вопрос... Почему нельзя просто создать новую схему с адресом information.tpl.. То есть просто название схемы другое. У меня так работало.
     
  4. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Потому что оно не будет работать! При поиске соответствия схем и контроллеров после первого совпадения поиск прекращается, то есть если для одного контроллера назначить несколько схем, то работать будет только одна из них.
     
  5. kolich85

    kolich85

    Регистрация:
    19 сен 2013
    Сообщения:
    164
    Симпатии:
    93
    Ну я тут не согласен. Потому что контроллер ищет схему по ид. А как я знаю Ид схемы всех уникальное. А сам фаил просто указевает на растановку в схеме. Так как расстановку в обох схемах одинаковая только другие модули все будет работать...
     
  6. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Вот запрос, которым выбирается из БД схема для контроллера:
    PHP:
    "SELECT * FROM " DB_PREFIX "layout_route WHERE '" $this->db->escape($route) . "' LIKE CONCAT(route, '%') AND store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY route DESC LIMIT 1"
    Не видите в нём ничего, что противоречит вашим словам?

    И ещё: будете так неграмотно писать, буду начислять штрафные баллы!
     
    Baco нравится это.
  7. Serkist

    Serkist

    Регистрация:
    8 фев 2013
    Сообщения:
    367
    Симпатии:
    75
    обнаружил косяк данного метода - если это прописать в модуле, то он перестает выводиться также на ВСЕХ неинформационных страницах (каталог, продукт и т.п.).
    Что можно с этим сделать?
     
  8. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Доплнить услловие.
    Вам нужно было выводить модуль исключительно на одной странице и мой код решает эту задачу. Если нужно выводить на одних страницах и не вводить на других, напишите подробно, на каких страницах нужно выводить.
     
  9. Serkist

    Serkist

    Регистрация:
    8 фев 2013
    Сообщения:
    367
    Симпатии:
    75
    категории, корзина, продукт, производители, контакты, акции. По сути - практически все остальные страницы.
    Суть такова, что в статье с ИД=9 модуль выводится в шапке, а в других статьях и страницах - в левой колонке.
     
  10. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    PHP:
    if ((!isset($this->request->get['information_id']) || $this->request->get['information_id'] != 9) && $setting['position'] == 'content_top'){
    return 
    false;
    } elseif((isset(
    $this->request->get['information_id']) || $this->request->get['information_id'] == 9) && $setting['position'] == 'column_left'){
    return 
    false;
    }
    И ставите модуль на всех схемах в левую колонку, а для информационных страниц ещё и в шапку.

    И убедитесь, что в функцию index передан массив $setting.



    Кстати, если шапка - это не стандартная модульная позиция (content_top), то нужно узнать, как она называется и вписать вместо content_top.
     
    Allaur, Baco и Serkist нравится это.
  11. Genexys

    Genexys

    Регистрация:
    17 апр 2015
    Сообщения:
    1
    Симпатии:
    0
    Доброго времени суток.
    Облазив не мало форумов, только Ваш мне попался по моей проблеме.
    В общем надо что бы модуль был только в одной статье и во всех товарах
    Или просто Вы бы не могли объяснить работу условия, что бы я понял и при изменениях позиций сам мог поменять.
     
  12. noir

    noir

    Регистрация:
    25 май 2016
    Сообщения:
    1
    Симпатии:
    1
    Genexys, нет у Вас вообще никакой проблемы. Создали новую схему, не привязывая ее к контроллеру, там прописали нужный модуль в нужной позиции, привязали к Вашей статье в "дизайне" созданную схему - и все дела: модуль вылез в нужном месте только этой статьи, дела 2 минуты максимум, код пилить не надо.
     
    samuel_L нравится это.
  13. samuel_L

    samuel_L

    Регистрация:
    6 окт 2012
    Сообщения:
    221
    Симпатии:
    132
    noir, правильно сказал. Дизайн-макеты и создаем схему. В статье вкладка дизайн и выбираем созданную схему. На эту схему цепляем нужный модуль.