Создание Модуля для 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>
Данный модуль отобразит все моодули из указанной в его настройках позиции и те из них который включены, а также если доступ у пользователя соответствует его группе.
Также читайте более подробную статью: Создание MVC модуля для Joomla 1.5!
PS. Читайте последние записи RSS Подписка на RSS

Комментарии
Ваши условия.
Вкратце что хотелось бы сделать:
- размещать теор.материал для студентов;
- обучающее тестирование по этому материалу;
- тестирование на оценку (3 попытки, нет возможности вернуть пред. вопрос, лимит по времени).
Я сам кое-какими навыками программировани я на PHP обладаю. Моя проблема в том, что портал кафедры, для которой будет это приложение написан на Joomla 1.5 и мое приложение придется интегрировать с порталом.
И наконец, вопрос: "Как лучше это все сделать? Писать модуль, компонент, еще что-либо. С джумлой не работал. Хотелось бы узнать мнение человека осведомленного )"
За потраченное на меня время отблагодарю.
Вот адрес портала кафедры: http://reis.ustu.ru/
Очень надеюсь на скорый ответ.
с уважением, Сергей Дембицкий
dembitskys@yand ex.ruЭтот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
8(912)605-33-10
Просто публикуете материалл и встависаете в него тесты через плагин или модуль, на http://extensions.joomla.org/ подберите модуль для тестов, там должны быть подходящие.
Второй вариант, если пользователь не зарегистрирован он попадая на эту страницу видит форму авторизации модуля со ссылкой для регистрации, жмет зарегистрироват ся и регистрируется, подтверждает емейл и пр. Далее процидура как в первом варианте.
Почему вам такая логика неподходит?
Мне так не очень нравится, потому что на моём сайте уже сделано поле для авторизации, которое в глаза бросается. Поэтому мне и не хочется делать так, чтобы на одной странице высвечивалось два модуля авторизации.
А нельзя ли вставить какой-нибудь скриптик для проверки авторизации пользователя в файл, который отвечает за вывод формы регистрации. Мол типа: Если авторизован, то выдавать сообщение; если неавторизован, то выдавать форму. ???
С помощью скрипта
{.........}
мне таки удалось сделать то что я хотел!
Большое Вам спасибо за отзывчивость!!!
Цену обговорим