Блог | WEB
Создание Модуля для Joomla 1.5!В данной статье рассматривается создание модуля для Joomla 1.5!, но эта статья не будет описывать саздание модуля типо "Hellow World" цель ее другая - показать на реальном примере возможности которые заложены модулях Joomla!. Как известно модули вызываются на определенных участках (позициях) страницы и отображают определенный контент в зависимости от их типа, также модули могут входить в состав компонента и использоваться совместно с плагинами, Joomla по умолчанию в комплекте содержит некоторые стандартные модули которые выполняют необходимые функции, такие как отображение пунктов меню, новости, произвольный HTML код и пр.
Модули могут иметь различный функционал, но наш модуль будет выполнять немного нестандартную задачу - он будет отображать все модули из определенной позиции, это может показаться пустой тратой времени так как данная возможность заложена в самом шаблоне для Joomla! - модули просто выводятся по очереди через определенную позицию, указанную в настройках модуля, однако бывает необходимо в одной позиции для модулей некоторые из модулей сгруппировать, в таком случае только одной позицией в шаблоне будет не достаточно, собственно это и является главной проблемой которую решает данный модуль. Код данного модуля будет достаточно прост, но и в тоже время обеспечивать весь необходимый для него функционал. Структура каталогов и файлов также проста и стандартна:
- mod_mgm/mod_mgm.php - входная точка для запуска нашего модуля, этот файл вызывается ядром Joomla, а он в свою очередь подключает шаблон и отображает его;
- mod_mgm/tmpl/default.php - это сам шаблон который отображает данные (в нашем случае модули из опр. позиции);
- mod_mgm/mod_mgm.xml - установочный файл для модуля, через него в админ панели модуля будут настраиватся параметры для модуля (размер, фон и тп.);
- mod_mgm/index.html - пустой файл которы отобразит чистую страницу при прямом обращении к директории модуля;
- mod_mgm/tmpl/index.html - пустой файл которы отобразит чистую страницу при прямом обращении к директории модуля;
Итак содержимое файла mod_mgm.php имеет такой синтаксис, который запускает модуль всего один раз при запросе к контроллеру Joomla!
- <?php
- // Include the syndicate functions only once
- require(JModuleHelper::getLayoutPath('mod_mgm'));
- ?>
В первой строке проверяем наличие установленной константы для препятсвия вызова данного модуля извне, то есть не контроллером Joomla! Теперь опишем содержимое главного файла - шаблона модуля, он в данном примере выполняет все манипуляции с данными. Начну с самого важно - с реализации получения модулей из определенной позиции.
Для этой цели используеться обращение к классу JModuleHelper и вызов его метода getModules которому передается всего один параметр - "позиция" модулей, и который вернет массив объектов(модулей) с их параметрами. Далее в цикле каждый объект массива передаем методу renderModule класа JModuleHelper который принимает два параметра - это объект с параметрами модуля и стиль отображения данного модуля. Синтаксис имеет следующий вид:
- <?php
- jimport( 'joomla.application.module.helper' );
- $modules = JModuleHelper::getModules($params->get('modPosition'));
- $attribs['style'] = 'xhtml';
- for($i=0;$i<$count;$i++){
- }
- ?>
Где в третей строке медоту getModules() праметр "позиция модулей" будет передаваться исходя из значения указанного в настройках администраторской части модуля. Резервирование этих параметров и полей в таблице Базы Данных Joomla под эти параметры осуществляется при инсталляции модуля, а их имя и значение (default) извлекаются из установочного файла XML в нашем случае это файл mod_mgm.xml и его синтаксис имеет такой вид:
- <install type="module" version="1.5.0">
- <name>MGM</name>
- <author>cleverscript.ru</author>
- <version>0.0.1</version>
- <description>Этот модуль позволяет выводить в себе другие модули</description>
- <files>
- <filename module="mod_mgm">mod_mgm.php</filename>
- <filename>index.html</filename>
- <filename>tmpl/default.php</filename>
- <filename>tmpl/index.html</filename>
- </files>
- <params>
- <param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="PARAMMODULECLASSSUFFIX" />
- <param name="@spacer" type="spacer" />
- <param name="modPosition" type="text" default="" label="Позиция модуля" description="Модули этой позиции будут выведены модулем MGM" />
- </params>
- </install>
Обратите внимание на имя параметра для указания позиции модулей и то как в самом модуле извлекается значение этого параметра:
- $modules = JModuleHelper::getModules($params->get('modPosition'));
Осталось еще немного расширить возможности нашего модуля, и дать возможность указывать высоту для HTML каркаса нашего модуля. Делается это следующим образом, формируем HTML каркас в php:
- <?php
- $modules = JModuleHelper::getModules($params->get('modPosition'));
- $attribs['style'] = 'xhtml';
- echo <<<HTML
- <div class="main_mgm">
- HTML;
- for($i=0;$i<$count;$i++){
- }
- echo <<<HTML
- </div>
- HTML;
И также формируем CSS правила для стилей класса этого HTML каркасса, следующим образом:
- <?php
- if($params->get('modHeight')){
- $height = $params->get('modHeight');
- $headtag = "<style type='text/css'>
- .main_mgm{
- height:".$height."px;
- }</style>";
- }else{$height = "auto";
- $headtag = "<style type='text/css'>
- .main_mgm{
- height:".$height.";
- }</style>";
- }
- ?>
А затем вставляем данный стиль в HEAD документа следующим образом:
- <?php
- $GLOBALS['mainframe']->addCustomHeadTag($headtag);
- ?>
Конечный вид шаблона модуля примет такой вид:
- <?php
- if($params->get('modHeight')){
- $height = $params->get('modHeight');
- $headtag = "<style type='text/css'>
- .main_mgm{
- height:".$height."px;
- }</style>";
- }else{$height = "auto";
- $headtag = "<style type='text/css'>
- .main_mgm{
- height:".$height.";
- }</style>";
- }
- $GLOBALS['mainframe']->addCustomHeadTag($headtag);
- $modules = JModuleHelper::getModules($params->get('modPosition'));
- $attribs['style'] = 'xhtml';
- echo <<<HTML
- <div class="main_mgm">
- HTML;
- for($i=0;$i<$count;$i++){
- }
- echo <<<HTML
- </div>
- HTML;
- ?>
И еще следует добавить параметр для указания высоты модуля в установочный файл:
- <install type="module" version="1.5.0">
- <name>MGM</name>
- <author>cleverscript.ru</author>
- <version>0.0.1</version>
- <description>Этот модуль позволяет выводить в себе другие модули</description>
- <files>
- <filename module="mod_mgm">mod_mgm.php</filename>
- <filename>index.html</filename>
- <filename>tmpl/default.php</filename>
- <filename>tmpl/index.html</filename>
- </files>
- <params>
- <param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="PARAMMODULECLASSSUFFIX" />
- <param name="@spacer" type="spacer" />
- <param name="modPosition" type="text" default="" label="Позиция модуля" description="Модули этой позиции будут выведены модулем MGM" />
- <param name="@spacer" type="spacer" />
- <param name="modHeight" type="text" default="auto" label="Высота модуля" description="Высота модуля MGM" />
- </params>
- </install>
Данный модуль отобразит все моодули из указанной в его настройках позиции и те из них который включены, а также если доступ у пользователя соответствует его группе.
1387 визитов ↳ 0 ответов | Ваше мнение о материале | Голосовало: |