БЛОГОДЖУМЛА - БЛОГ О ДЖУМЛА

Передача параметров из шаблона в модуль в JOOMLA

  • Категория: Joomla
  • Автор:
  • Просмотров: 8939

Сегодня я хочу рассказать как практически использовать замечательную возможность шаблонизации в Joomla на реальном примере.

Допустим, по условию ТЗ, нам нужно создать каталог товаров с двухуровневой структурой - категории и подкатегории. И по разработаному макету нужно, чтобы в верхнем горизонтальном меню (в шапке) у нас были только родительские категории. После входа в одну из родительских категорий нужно чтобы в левой колонке появлялось вертикальное меню, но только с подкатегориями выбранной родительской категории.

Ничего сложного?  Использовать два разных модуля? Мы решим эту задачу с помощью одного.

Допустим, каталог у нас построен на JoomShopping и для вывода категорий мы будем использовать стандартный модуль Jshopping Categories.

Этот модуль выводит сразу и категории и подкатегории. Устанавливаем модуль в позицию top и ещё раз в позицию left.

У модуля есть шаблон вывода - default.php. Для того чтобы модуль в разных позициях шаблона работал по разному - создаем копию шаблона вывода, называем её default2.php (правим как нам нужно) и помещаем в эту же папку. Теперь нам остается как-то сообщить модулю, что он находится в конкретной позиции шаблона (либо top, либо left) и, взависимости от этого, модуль должен подключить определенный шаблон вывода. 

А делается это вот так. Так как у нас модуль используется 2 раза мы можем менять шаблон вывода только в позиции left, а в остальных случаях оставить стандартный шаблон. В index.php Вашего шаблона сайта вывод модуля в позиции top оставляем as is, а вывод в позицию left должен быть с атрибутом:


	<jdoc:include type="modules" name="left" style="xhtml" order="left"/>

Именно переменная order и укажет модулю в какой позиции он находится.

В файле mod_jshopping_categories.php находим в самом низу вызов шаблона вывода


	require(JModuleHelper::getLayoutPath('mod_jshopping_categories'));

и меняем на


	if($attribs && $attribs['order']=='left') require(JModuleHelper::getLayoutPath('mod_jshopping_categories','default2'));

	else require(JModuleHelper::getLayoutPath('mod_jshopping_categories'));

Второй параметр функции getLayoutPath позоляет нам указать имя шаблона вывода.

Задача решена. 

Back to top