В данной статье рассматривается создание модуля для 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!
Code
<?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 который принимает два параметра - это объект с параметрами модуля и стиль отображения данного модуля. Синтаксис имеет следующий вид:
Code
<?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 и его синтаксис имеет такой вид:
Code
<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>
Обратите внимание на имя параметра для указания позиции модулей и то как в самом модуле извлекается значение этого параметра:
Code
$modules = JModuleHelper::getModules($params->get('modPosition'));
Осталось еще немного расширить возможности нашего модуля, и дать возможность указывать высоту для HTML каркаса нашего модуля. Делается это следующим образом, формируем HTML каркас в php:
Code
<?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 каркасса, следующим образом:
Code
<?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 документа следующим образом:
Code
<?php
$GLOBALS['mainframe']->addCustomHeadTag($headtag);
?>
Конечный вид шаблона модуля примет такой вид:
Code
<?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;
?>
И еще следует добавить параметр для указания высоты модуля в установочный файл:
Code
<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>
Данный модуль отобразит все моодули из указанной в его настройках позиции и те из них который включены, а также если доступ у пользователя соответствует его группе.
Также читайте более подробную статью: Создание MVC модуля для Joomla 1.5!
Статья взята отсюда.
В этой теме Вы можете задать вопрос о материале: Создание Модуля для Joomla 1.5!.