Создание модуля для для Joomla 2.5 и 3 значительно проще, чем создание компонента, который обычно реализует более сложную бизнес-логику. Обычно, стандартный модуль в Joomla представляет собой следующую структуру файлов:
mod_name (папка с файлами модуля, где name – это имя модуля):
– mod_name.xml (файл описания модуля в xml-формате)
– mod_name.php (основной файл модуля)
– helper.php (необязательный файл)
– index.html (пустой html-файл)
– tmpl (папка с шаблонами оформления вывода содержания блока)
– default.php (шаблон оформления по умолчанию)
– index.html (пустой html-файл)
Рассмотрим пример простейшего модуля «mod_news».
Пример содержания xml-файла mod_news.xml (необходимый файл, без которого вы не сможете установить модуль) :
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="2.5.0" method="install">
<name>mod_news</name>
<author>Andrew</author>
<creationDate>18.03.2013</creationDate>
<copyright>Copyright (C) 2013 All rights reserved.</copyright>
<license>GNU General Public License</license>
<authorEmail>admin@myemail.ru</authorEmail>
<authorUrl>poleshuk.ru</authorUrl>
<version>2.5.0</version>
<description>MOD_NEWS_XML_DESCRIPTION</description>
<files>
<filename module="mod_news">mod_news.php</filename>
<folder>tmpl</folder>
<filename>index.html</filename>
<filename>mod_news.xml</filename>
<filename>helper.php</filename>
</files>
</extension>
Как видно из примера, сначала включается информация об авторе и версиях, затем – информация о файлах и папках, которые поставляются с модулем.
Пример содержания файла mod_news.php (основной файл модуля):
<?php
/**
* здесь описание и комментарии
*/
defined('_JEXEC') or die;
// подключаем наш хелпер
require_once __DIR__ . '/helper.php';
//вызываем метод getNews(), который находится в хелпере
//(извлекает из базы данных нужную нам информацию
$news = modNewsHelper::getNews();
//подключаем html-шаблон для вывода содержания модуля (шаблон default).
require JModuleHelper::getLayoutPath('mod_news', $params->get('layout', 'default'));
Пример хэлпера helper.php
<?php
defined('_JEXEC') or die;
class modNewsHelper
{
public static function getNews()
{
//подключаемся к базе данных
$app = JFactory::getApplication();
$db = JFactory::getDbo();
//здесь какие-то действия и запросы к базе данных
...
//возвращаем результат
return $rows;
}
}
Файл вывода содержимого нашего модуля default.php
<?php
defined('_JEXEC') or die;
?>
<?php foreach ($news as $item) : ?>
<li><?php echo $item->title;?></li>
<li><?php echo $item->data;?></li>
<?php endforeach; ?>