Как использовать event в шаблоне для вывода модуля на нужных страницах.

#1 13 октября 2016 в 23:13
Первая ветка, суть проблемы, модуль со списком категорий, в моём случае видеролики.
Назначен показ на пункт меню "Видео". Отмечено "Не показывать на вложенных страницах.
На главной странице видео модуль есть — ok. На странице просмотра одного видеоролика модуля нет — ok. На странице списка ролика, при пагинации на вторую страницу списка модуля тоже нет — NOT OK. Эта страница считается вложенной относительно главной страницы видео, но она по сути та же главная страница видео, просто ее продолжение, здесь список разделов нужен.

Кроме того есть модуль, который стоило бы вывести только на страницах просмотра отдельного видеоролика. И не стоило бы выводить на страницах списков роликов.

Можно вставлять модульные позиции в шаблон tpl. Этот вариант годится для модуля который нужно вывести на странице видео и не нужно выводить на главной странице или в категориях. Но он не годится для модуля со списком категорий. Модуль списка категорий выводится в сайдбаре, и если пытаться запихнуть его в tpl категории, сложно имитировать тот же дизайн что и сайдбар.

Пришло в голову опираться на events instantcms.ru/blogs/haki-patchi-moduli-plaginy-i-prochie-dorabotki-dvizhka/spisok-vseh-event-ov-sistemy.html
Например задать в основном шаблоне условие:
GET_BOARD_RECORDS — здесь выводить модуль со списком категорий
GET_BOARD_RECORD — здесь не выводить модуль списка категорий но вывести модульную позицию которую нужно на странице одного ролика или в данном случае одного объявления.

Не подскажете, как это устроить в template.php?
#2 14 октября 2016 в 11:06
Нил™, О каком модуле речь, о "Разделы статей"? Может проще написать условие в template.php в диве с сайдбаром. Что то типа, если menu_id такое то, то модуль такой то. Сейчас не помню название переменных, но они есть.
#3 14 октября 2016 в 11:48

Может проще написать условие в template.php в диве с сайдбаром. Что то типа, если menu_id такое то, то модуль такой то.

Lora
Не поможет.

Есть сайдбар.
Есть модуль "Категории видео" (или любой другой)


И есть модуль скажем новое видео.


Есть пункт меню "Видео". (или любой другой компонент, раздел)


Нужно что модуль с категориями выводился в сайдбаре на всех страницах раздела где списки материалов



и не выводился на странице просмотра самого одного отдельно взятого материала.



И нужно что бы модуль "новое видео" выводился на той же позиции в сайдбаре на странице просмотра ролика, и не выводился на страницах списков роликов.


Если цеплять модуль на пункт меню "Видео" то он и будет показываться на всех страницах видео.
Если ставить отметку "Не показывать на вложенных страницах" он вложенными будет считать и вторую страницу списка роликов при просмотре категории.

Поэтому может быть как то через event Если есть событие "Просмотр списка роликов" — модуль со списком категорий. Конец. Если есть событие просмотр одного видеоролика — модульная позиция для модуля Новое видео. Конец.

Я не знаю работает ли такое в шаблоне или нет и если да то как вызвать для создания условия. Вообще если опираться на это, настройки показа модуля можно было бы сделать более гибкими.
#4 14 октября 2016 в 13:18
Нил™, кто Вам мешает сделать принудительный вывод? к любой уникальной переменной привяжитесь и все. Ставим показывать на всех страницах, далее в условии модуля проверять. нужная ли страница. Посмотрите условия которые уникальны для тех страниц где надо.
#5 14 октября 2016 в 13:22

Не подскажете, как это устроить в template.php?

Нил™
callEvent('...') производит событие. Если хочешь привязать вывод модуля к событию, то наверное нужно для начала написать плагин? Затем в index.php это событие объявить и затем всё должно работать. По идеи. smile
#6 14 октября 2016 в 13:25

Нил™, кто Вам мешает сделать принудительный вывод?

kirkr
Возможно с пагинацией не сработает.
#7 14 октября 2016 в 14:24
В общем пока с вашей помощью пришел к такому
в template.php

  1. <?php
  2. $thispageurl=$_SERVER['REQUEST_URI'];
  3. if (preg_match("/.html/i", "$thispageurl")) {
  4. $this->printModules('sidebar2');
  5. } else {
  6. $this->printModules('sidebar3');
  7. }
  8. ?>
sidebar2 — модульная позиция на которую можно публиковать те модули, которые нужно выводить только на страницах просмотра одного материала, контента.
sidebar3 — модульная позиция на которую можно публиковать те модули, которые нужно выводить только на всех страницах (с пагинацией) определенного раздела (списка материалов), но не нужно выводить на странице просмотра одного материала.

Несколько извращенно, но это самое простое. Как правило страницы категорий не имеют расширения html а страница просмотра материала имеет. От этого и будем пока отталкиваться.
Использовать дополнительные плагины для вывода модуля тоже из камасутры в принципе.

Спасибо за участие!
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.