Сейчас у многих думаю промелькнуло 2 варианта. Первый это, конечно, создать пункт меню для этого материала и привязать к нему отображение. А если материалов тысяча? CMS малость припухнет от такого подхода. Второй вариант это воспользоваться каким-нибудь сторонним расширением типа Modules Anywhere.  Это тоже не подходящий вариант для таких как я - не особых любителей сторонних расширений внутри своего ресурса. Поэтому я использую третий вариант - свой стиль модуля с условием его отображения.  

В стандартной системе Joomla 3 у вас на выбор есть несколько стандартных стилей отображения модуля, обычно это что-то типа none, html5, table, horz, xhtml, rounded, outline которые описаны в файле /templates/system/html/modules.php и еще куча других, которые могут быть перезаписаны вашим шаблоном в файле /templates/ваш_шаблон/html/modules.php. Они задают скелет шаблона, в формате которого и выводится содержание какого-либо модуля. Но кто сказал, что нам нельзя в стиль отображения модуля включать какие-либо дополнительные условия его отображения? Допустим, чтобы модуль, которому присвоен стиль шаблона myxhtml, отображался только в случае, если посетитель сайта открыл страницу с полным содержанием статьи, а во всех остальных случаях модуль бы не срабатывал. 

1. Получаем тип страницы в Joomla 3

Чтобы задать условие отображения модуля, нам надо сначала получить тип страницы, дабы узнать отображается на странице сейчас категория, список материалов на главной, либо как раз полное отображение материала. Если стили отображения модулей не заданы в вашем шаблоне, то скопируйте файл templates/system/html/modules.php в /templates/ваш_шаблон/html/modules.php.  Скопируем, например, в нем стиль xhtml,  и переименуем его в Myxhtml. После обозначения функции добавляем строчки:

function modChrome_Myxhtml($module, &$params, &$attribs)
{
$app = JFactory::getApplication();
$task = $app->input->get('view');
echo $task;
...
}

При помощи родного класса JFactory мы получаем в переменную $task значение типа отображаемой страницы. 

2. Задаем условие отображение модуля исходя из типа страницы Joomla 3

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

Как отобразить модуль только на странице материала Joomla 3?

В зависимости от того, какую страницу вы открыли переменная $task будет принимать типовое значение и отображаться прямо в теле модуля. Допустим если вы увидите featured, значит вы на странице с избранными материалами, если category значит это шаблон категории, а вот если article - это то что нам нужно, макет отображения полного текста статьи.  Далее собственно задаем условие отображения:

function modChrome_Myxhtml($module, &$params, &$attribs)
{
$app = JFactory::getApplication();
$task = $app->input->get('view');
if ($task == 'article') {
if (!empty ($module->content)) { 
Здесь вывод модуля
}}}

И он будет отображаться только на странице материала. Можно поиграться и понять, какие значения может принимать переменная $task, будь то html, search, login и другие, а как это использовать вы теперь уже знаете.  Готовые примеры файла modules.php, которые я использую в шаблонах Ja_Elastica и Ja_Simpli доступны ниже:

Скачать файл modules-on-articles-j3.zip
Уже скачали 3 раз

 Спасибо за внимание, успехов вам и вашим проектам!

Добавить комментарий