Бизнес-логика (хелпер)
Бизнес-логика модуля находится в файле helper.php, который содержит класс хелпера. С его помощью модуль получает различные данные для их дальнейшего отображения на странице.
В нашем случае нам понадобится всего один метод для получения данных о последних зарегистрированных пользователях. Ниже представлен код хелпера:
<?php
/**
* @package Joomla.Site
* @subpackage mod_latest_users
*
* @copyright Информация о копирайте
* @license Информация о лицензии
*/
defined('_JEXEC') or die;
/**
* Хелпер для mod_latest_users
*
* @package Joomla.Site
* @subpackage mod_latest_users
*
* @since 1.0
*/
abstract class ModLatestusersHelper
{
/**
* Метод получает список последних зарегистрированных пользователей
*
* @param JRegistry &$params Параметры модуля
*
* @return mixed Список пользователей или null
*/
public static function getUsers(&$params)
{
// Получаем объект базы данных
$db = JFactory::getDbo();
// Получаем объект конструктора запросов
$query = $db->getQuery(true);
// Устанавливаем поля для выборки
$fields = array('name', 'username');
// Конструируем запрос
$query->select($db->quoteName($fields))
->from($db->quoteName('#__users'))
->where($db->quoteName('block') . ' = 0')
->order($db->quoteName('registerDate') . ' DESC');
// Устанавливаем запрос
$db->setQuery($query, 0, $params->get('count', 5));
// Выполняем запрос и получаем результат
$result = $db->loadObjectList();
return $result;
}
}
В принципе, не существует каких-то особых правил или соглашений по именованию класса хелпера. Но для более удобной идентификации класса, его название складывается из нескольких частей:
слово Mod + название модуля без специальных символов + слово Helper
Таким образом, название класса хелпера нашего модуля - ModLatestusersHelper.
Но, если Вы планируете использовать встроенный в Joomla 3 com_ajax, то такой формат именования обязателен.
Обратите внимание, что в методе getUsers()
мы используем параметры модуля для ограничения количества отображаемых пользователей при выполнении запроса. Результатом выполнения этого запроса будет список объектов в виде массива.
Бизнес-логика нашего модуля довольно простая и отражает несложный функционал нашего модуля. Именно поэтому класс хелпера тоже простой.
Вывод данных
Вывод данных в модуле осуществляется с помощью макетов вывода (шаблонов). Макеты располагаются в папке /tmpl. В этой папке можно расположить несколько различных макетов для разных вариантов вывода данных.
Подключение макета происходит в точке входа модуля:
require JModuleHelper::getLayoutPath('mod_latest_users', $params->get('layout', 'default'));
А выбор макета задается в параметрах установочного файла в специальном типе поля modulelayout
:
<field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" />
Вот как выглядит наш макет default.php:
<?php
/**
* @package Joomla.Site
* @subpackage mod_latest_users
*
* @copyright Информация о копирайте
* @license Информация о лицензии
*/
defined('_JEXEC') or die;
$displayMode = $params->get('display_mode', 0);
?>
<div>
<?php if ($users) : ?>
<ul id="latest_users_list">
<?php foreach ($users as $user) : ?>
<li>
<?php if ($displayMode == 0) : ?>
<?php echo $user->username; ?>
<?php elseif ($displayMode == 1) : ?>
<?php echo $user->name; ?>
<?php elseif ($displayMode == 2) : ?>
<?php echo $user->username; ?> (<?php echo $user->name; ?>)
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
<?php else : ?>
<span><?php echo JText::_('MOD_LATEST_USERS_NO_USERS'); ?></span>
<?php endif; ?>
</div>
Обратите внимание, что здесь нам тоже доступны параметры модуля в переменной $params
. Но в отличие от хелпера, макеты имеют общую с точкой входа область видимости, поэтому передавать их специально не приходится. Благодаря параметрам мы меняем логику вывода данных и отображаем только логин, только имя или логин и имя вместе.
Кроме файла макета default.php у нас есть ещё макет table.php. Если отличие только в том, что в нем применяется табличная верстка:
<?php
/**
* @package Joomla.Site
* @subpackage mod_latest_users
*
* @copyright Информация о копирайте
* @license Информация о лицензии
*/
defined('_JEXEC') or die;
$displayMode = $params->get('display_mode', 0);
?>
<table>
<?php if ($users) : ?>
<?php foreach ($users as $user) : ?>
<tr><td>
<?php if ($displayMode == 0) : ?>
<?php echo $user->username; ?>
<?php elseif ($displayMode == 1) : ?>
<?php echo $user->name; ?>
<?php elseif ($displayMode == 2) : ?>
<?php echo $user->username; ?> (<?php echo $user->name; ?>)
<?php endif; ?>
</td></tr>
<?php endforeach; ?>
<?php else : ?>
<tr><td><?php echo JText::_('MOD_LATEST_USERS_NO_USERS'); ?></td></tr>
<?php endif; ?>
</table>
В имени файлов макетов не допускается символ нижнего подчеркивания.
Языковые файлы
Языковые файлы модуля как правило располагают в папке /language. Каждый из языков в свою очередь располагается в папке с именем тэга языка. В принципе такой подход расположения языковых файлов относится не только к модулям, но и ко всем расширениям в Joomla.
После установки модуля вся папка целиком будет скопирована в корневую папку установки модуля. Таким образом, мы изолируем и защищаем языковые файлы. Например, если администратор удалит какой-то язык из системы, то наши языковые файлы не будут удалены. Подробнее о расположении языковых файлов вы можете прочитать в материале "Создание компонента для Joomla 2.5 – языковые файлы".
Ниже приведено содержимое языковых файлов нашего модуля:
/language/en-GB/en-GB.mod_latest_users.ini
; mod_latest_users
; Информация о копирайте
; Информация о лицензии
MOD_LATEST_USERS="Latest users"
MOD_LATEST_USERS_DESCRIPTION="Module displays latest registered users"
MOD_LATEST_USERS_NO_USERS="No users"
MOD_LATEST_USERS_DISPLAY_MODE_LABEL="Display mode"
MOD_LATEST_USERS_DISPLAY_MODE_DESC="Choose a display mode of the list"
MOD_LATEST_USERS_MODE_0="Login"
MOD_LATEST_USERS_MODE_1="Name"
MOD_LATEST_USERS_MODE_2="Login (Name)"
MOD_LATEST_USERS_COUNT_LABEL="Count"
MOD_LATEST_USERS_COUNT_DESC="The number of users to display"
MOD_LATEST_USERS_INCLUDE_CSS_LABEL="Include CSS"
MOD_LATEST_USERS_INCLUDE_CSS_DESC="If yes module's own CSS file will be used"
/language/en-GB/en-GB.mod_latest_users.sys.ini
MOD_LATEST_USERS="Latest users"
MOD_LATEST_USERS_DESCRIPTION="Module displays latest registered users"
/language/ru-RU/ru-RU.mod_latest_users.ini
; mod_latest_users
; Информация о копирайте
; Информация о лицензии
MOD_LATEST_USERS="Последние пользователи"
MOD_LATEST_USERS_DESCRIPTION="Модуль выводит последних зарегистрированных пользователей"
MOD_LATEST_USERS_NO_USERS="Нет пользователей"
MOD_LATEST_USERS_DISPLAY_MODE_LABEL="Режим отображения"
MOD_LATEST_USERS_DISPLAY_MODE_DESC="Выберите режим отображения списка"
MOD_LATEST_USERS_MODE_0="Логин"
MOD_LATEST_USERS_MODE_1="Имя"
MOD_LATEST_USERS_MODE_2="Логин (Имя)"
MOD_LATEST_USERS_COUNT_LABEL="Количество"
MOD_LATEST_USERS_COUNT_DESC="Количество отображаемых пользователей"
MOD_LATEST_USERS_INCLUDE_CSS_LABEL="Подключать CSS"
MOD_LATEST_USERS_INCLUDE_CSS_DESC="Если выбрано Да, будет использован собственный CSS файл модуля"
/language/ru-RU/ru-RU.mod_latest_users.sys.ini
MOD_LATEST_USERS="Последние пользователи"
MOD_LATEST_USERS_DESCRIPTION="Модуль выводит последних зарегистрированных пользователей"
Итог
На этом разработка модуля завершена. Можно собирать его в архив и устанавливать. Согласитесь, что разработка модуля - это совсем несложно. Если вы хотите, чтобы я разобрал еще какой-то вопрос, связанный с разработкой модуля, то пишите в комментариях.
Код модуля
Исходный код модуля доступен на GitHub: для Joomla 2.5 и для Joomla 3.
Также вы можете скачать архив: для Joomla 2.5 и для Joomla 3.