Бизнес-логика (хелпер)
Бизнес-логика модуля находится в файле 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.
						