Попробуем создать собственный модуль для Joomla 1.7-2.5. Данный материал, предоставляет описание того, как конструируются модули. Желательно после изучения, рассмотреть действующие модули в качестве примера.
Для этого создадим каталог и положим туда любой файл index.html, чтобы избежать прямого попадания в директорию.
Например модуль будет называться mod_name. Его задача будет отобразить список пользователей, количество которых будет задаваться в административной панели управления модулем.
Архив с исходными файлами - Страница загрузки
Все модули Joomla имеют префикс mod_, после которого идет название модуля.
Минимальный набор файлов для полноценной работы модуля:
/modules/mod_name/index.html
/modules/mod_name/mod_name.php
/modules/mod_name/mod_name.xml
/modules/mod_name/helper.php
/modules/mod_name/tmpl/index.html
/modules/mod_name/tmpl/default.php
/languages/ru-RU/ru-RU.mod_name.ini
Данный модуль использует архитектуру MVC(Model, View, Controller — Модель, Представление, Контроллер).
Мы отделяем логику модуля(контроллер) в файл helper.php, чтобы вся работа с данными производилась только там.
Представление (View) - это шаблон который будет отображаться на web-странице, вынесем в папку tmpl/default.php. Сюда же помещяются изображения, стили.
Файл mod_name.php:
<?php defined('_JEXEC') or die('Restricted access'); // Подключение файла helper.php require_once dirname(__FILE__).'/helper.php'; // берем параметры из файла конфигурации $user_count = $params->get('usercount'); // берем items из файла helper $items = ModMymodulHelper::getItems($user_count); // Эти параметры вводятся в административной панели в управлении модулем // И отвечает за показ количества пользователей $name_count = $params->get('name_count'); // включение шаблона для отображения require(JModuleHelper::getLayoutPath('mod_name')); ?>
Основные этапы работы данного файла:
Мы включаем(include) файл helper.php, который будет работать с логикой модуля и данными.
После того, как мы получаем данные, мы просто загружаем шаблон, который использует наши данные и отображает их.
Файл mod_name.xml:
Будет содержать описание модуля и некоторые его настройки:
<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="2.5" client="site" method="upgrade"> <name>Название модуля</name> <author>Имя автора</author> <!--Дата создания модуля--> <creationDate>2012-02-17</creationDate> <copyright>Копирайт</copyright> <!--Лицензия модуля--> <license>GPL 2.0</license> <!--e-mail автора--> <authorEmail>info(собака)info.com </authorEmail> <!--Сайт автора--> <authorUrl>www.site.com</authorUrl> <!--Версия модуля--> <version>1.0</version> <description>Описание модуля</description> <!--Описываем какие файлы присутствуют в модуле--> <!--Вместо тега filename можно вставить folder, т.е. папки которые есть в модуле, что облегчает описание содержимого, потому что не нужно описывать каждый файл--> <files> <filename module="mod_name">mod_name.php</filename> <filename>index.html</filename> <filename>helper.php</filename> <folder>tmpl</folder> </files> <!--Подключение языков--> <languages> <language tag="ru-RU">language/ru-RU/ru-RU.mod_name.ini</language> </languages> <!--Параметры модуля, которые буду отображаться в административной панели, на странице изменения параметров модуля--> <config> <fields name="params">> <fieldset name="basic"> <!--Основные параметры, буду описывать только их--> <!-- name="name_count" - имя параметра, который принимает файл mod_name type="text" - тип поля параметра label="MOD_NAME_COUNT" - имя метки параметра description="MOD_NAME_DESCRIPTION" - описание параметра, во всплывающей подсказке default="5" - значение по умолчанию --> <field name="name_count" type="text" label="MOD_NAME_COUNT" description="MOD_NAME_DESCRIPTION" default="5" /> </fieldset> </fields> </config> </extension>
Файл helper.php
Он является по сути "моделью" для получения данных, этот файл содержит в себе один класс - ModMymodulHelper, который содержит функцию getItems принимающую параметры и использует их в своей работе.
<?php //Защита от прямого обращения к файлу defined('_JEXEC') or die('Restricted access'); //Класс через который работают файлы class ModMymodulHelper{ public function getItems($userCount){ //Подключение к бд joomla $db = JFactory::getDBO(); //Выбираем из какой таблицы будем вытаскивать данные $query = 'SELECT * FROM #__users'; $db->setQuery($query); $items = $db->loadObjectlist(); return $items; } } ?>
Что нужно еще заметить, некоторые разработчики не помещают ничего в файл helper.php, оставляя только код ограничения доступа, передавая параметры из mod_name.php в default.php.
Файл default.php:
И наконец, чтобы все это отображалось мы создаем файл tmpl/default.php. Это файл отображает все в виде html
<?php defined('_JEXEC') or die('Restricted access'); $i=1; // Вывод текста из языкового файла echo JText::_('MOD_NAME_USERS').": <hr />"; foreach ($items as $item ){ // $name_count - выводит количество пользователей, заданное в административной панели if ($i <= $name_count){ echo $item->name.'<br>'; } $i++; } ?>
Файл ru-RU.mod_name.ini
Языковый файл для возможности создания многоязычных сайтов
MOD_NAME_USERS = "Список пользователей"
MOD_NAME_COUNT = "Количество пользователей"
MOD_NAME_DESCRIPTION = "Укажите количество пользователей которые будут отображаться"