|

23.03.2012 в 14:22:17 | Добавил: rayven | Просмотров: 1387 | 0 ответов

В данной статье рассматривается создание модуля для 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
  • defined('_JEXEC') or die('Direct Access to this location is not allowed.');
  • // Include the syndicate functions only once
  • require(JModuleHelper::getLayoutPath('mod_mgm'));
  • ?>
  •  

 

В первой строке проверяем наличие установленной константы для препятсвия вызова данного модуля извне, то есть не контроллером Joomla! Теперь опишем содержимое главного файла - шаблона модуля, он в данном примере выполняет все манипуляции с данными. Начну с самого важно - с реализации получения модулей из определенной позиции.

 

Для этой цели используеться обращение к классу JModuleHelper и вызов его метода getModules которому передается всего один параметр - "позиция" модулей, и который вернет массив объектов(модулей) с их параметрами. Далее в цикле каждый объект массива передаем методу renderModule класа JModuleHelper который принимает два параметра - это объект с параметрами модуля и стиль отображения данного модуля. Синтаксис имеет следующий вид:

 

  •  
  • <?php
  • defined('_JEXEC') or die('Restricted access');
  • jimport( 'joomla.application.module.helper' );
  • $modules = JModuleHelper::getModules($params->get('modPosition'));
  • $count = count($modules);
  • $attribs['style'] = 'xhtml';
  • for($i=0;$i<$count;$i++){
  • echo JModuleHelper::renderModule($modules[$i], $attribs);
  • }
  • ?>
  •  

 

Где в третей строке медоту 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'));
  • $count = count($modules);
  • $attribs['style'] = 'xhtml';
  •  
  • echo <<<HTML
  • <div class="main_mgm">
  • HTML;
  • for($i=0;$i<$count;$i++){
  • echo JModuleHelper::renderModule($modules[$i], $attribs);
  • }
  • 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'));
  • $count = count($modules);
  • $attribs['style'] = 'xhtml';
  •  
  • echo <<<HTML
  • <div class="main_mgm">
  • HTML;
  • for($i=0;$i<$count;$i++){
  • echo JModuleHelper::renderModule($modules[$i], $attribs);
  • }
  • 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 ответов
Ваше мнение о материале 0 из 10
Голосовало:

Похожие материалы

="uForm uComForm">
avatar
close