Разработка базового модуля
From Joomla! Documentation
< J3.x:Creating a simple module
Данная серия материалов написана о том, как разработать какой-либо модуль для Joomla! в версии . Вы можете пройтись по материалам этой серии с помощью выпадающего навигационного меню.
Начните со вступления и пройдитесь по материалам этой серии с помощью либо расположенной внизу навигационной кнопки, либо расположенного справа навигационного текстового блока (Материалы в этой серии).
Модули представляют собой легкие и гибкие расширения. Они используются для малых кусочков страницы, которые, как правило, менее сложные и могут быть замечены вокруг разных компонентов.
Вы можете увидеть много примеров модулей в стандартной установке Joomla!: - Меню - Последние Новости - Форма входа - и многое другое.
Этот учебник объяснит, как создать простой модуль "Привет мир". С помощью данного руководства вы узнаете основную файловую структуру модуля. Затем эта базовая структура может быть расширена, чтобы произвести более сложные модули.
Файловая Структура
Существует четыре основных файла, которые используются в стандартном шаблоне разработки модуля:
mod_helloworld.php
- этот файл и является основной точкой входа для модуля. Он будет выполнять все необходимые процедуры инициализации, вызова вспомогательных средств для сбора необходимых данных а также шаблон, который будет отображать вывод модуля.
mod_helloworld.xml
- этот файл содержит информацию о модуле. Он определяет файлы, которые должны быть установлены установщиком Joomla! и задает параметры конфигурации модуля.
helper.php
- этот файл содержит вспомогательный класс, используемый для того, чтобы сделать фактическую работу в получении информации, которая будет отображаться в модуле (как правило, из базы данных или другого источника).
tmpl/default.php
- это шаблон модуля. Этот файл будет принимать данные, собранные mod_helloworld.php и генерирует HTML, который будет отображаться на странице.
Создание mod_helloworld.php
Файл mod_helloworld.php будет выполнять три задачи:
- включает файл helper.php который содержит класс, который должен быть использован для того чтобы собрать необходимые данные
- вызывает соответствующий метод вспомогательного класса, чтобы получить данные
- включает шаблон для отображения результата.
Вспомогательный класс определяется в нашем файле helper.php . Этот файл включается выражением require_once:
require_once dirname(__FILE__) . '/helper.php';
require_once
используется потому, что наши вспомогательные функции определяются внутри класса, а мы хотим чтобы класс объявлялся только один раз.
Наш вспомогательный класс, пока еще не был определен, но, когда он появится, он будет содержать один метод: getHello(). Для нашего простого примера, на самом деле не надо этого делать - сообщение “Привет, мир!” , которое этот метод возвращает может быть просто включен в шаблон. Здесь мы используем вспомогательный класс, чтобы продемонстрировать эту базовую технику.
В настоящее время наш модуль не использует никаких параметров, но мы будем передавать их в любом случае во вспомогательный метод, так что они могут быть использованы позже, если мы решим расширить функционал нашего модуля.
Метод вспомогательного класса вызывается следующим образом:
$hello = modHelloWorldHelper::getHello($params);
Полный файл mod_helloworld.php
Полный файл mod_helloworld.php выглядит следующим образом:
<?php
/**
* Hello World! Module Entry Point
*
* @package Joomla.Tutorials
* @subpackage Modules
* @license GNU/GPL, see LICENSE.php
* @link http://docs.joomla.org/J3.x:Creating_a_simple_module/Developing_a_Basic_Module
* mod_helloworld is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
*/
// No direct access
defined('_JEXEC') or die;
// Include the syndicate functions only once
require_once dirname(__FILE__) . '/helper.php';
$hello = modHelloWorldHelper::getHello($params);
require JModuleHelper::getLayoutPath('mod_helloworld');
Единственная строка, которую мы до сих пор не объяснили - это первая строка. Эта строка проверяет, чтобы этот файл включался через приложение Joomla!. Это необходимо, чтобы предотвратить инъекции переменных и другие потенциальные проблем безопасности.
Создание helper.php
Файл helper.php содержит вспомогательный класс, который используется для извлечения данных, которые будут отображаться при выводе модуля. Как говорилось ранее, наш вспомогательный класс будет иметь один метод: getHello(). Этот метод будет возвращать сообщение ‘Привет, мир’.
Вот код файла helper.php :
<?php
/**
* Helper class for Hello World! module
*
* @package Joomla.Tutorials
* @subpackage Modules
* @link http://docs.joomla.org/J3.x:Creating_a_simple_module/Developing_a_Basic_Module
* @license GNU/GPL, see LICENSE.php
* mod_helloworld is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
*/
class ModHelloWorldHelper
{
/**
* Retrieves the hello message
*
* @param array $params An object containing the module parameters
*
* @access public
*/
public static function getHello($params)
{
return 'Hello, World!';
}
}
Нет правила, гласящего, что мы должны назвать наш вспомогательный класс так, как он назван у нас, но делать так - это полезно, чтобы его можно было легко идентифицировать и обнаружить. Обратите внимание, что название должно быть в таком формате, если вы планируете использовать плагин com_ajax.
Более сложные модули могут включать в себя запросы к базе данных или другие функции во вспомогательном методе класса.
Создание tmpl/default.php
Файлdefault.php это шаблон, который выводит модуль.
Код для файла default.php выглядит следующим образом:
<?php
// No direct access
defined('_JEXEC') or die; ?>
<?php echo $hello; ?>
Важный момент, который следует отметить, это то, что файл шаблона имеет ту же область видимости, что и файл mod_helloworld.php . Это означает, что переменная $hello может быть определена в файле mod_helloworld.php, а затем использоваться в файле шаблона, без каких-либо дополнительных объявлений или вызовов функций.
Создание mod_helloworld.xml
Файл mod_helloworld.xml используется, чтобы указать файлы, которые установщик должен скопировать и он используется Менеджером Модулей, чтобы определить, какие параметры используются для настройки модуля. Другая информация о модуле также указывается в этом файле.
Код mod_helloworld.xml выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="3.1.0" client="site" method="upgrade">
<name>Hello, World!</name>
<author>John Doe</author>
<version>1.0.0</version>
<description>A simple Hello, World! module.</description>
<files>
<filename>mod_helloworld.xml</filename>
<filename module="mod_helloworld">mod_helloworld.php</filename>
<filename>index.html</filename>
<filename>helper.php</filename>
<filename>tmpl/default.php</filename>
<filename>tmpl/index.html</filename>
</files>
<config>
</config>
</extension>
файлы Манифеста объясняют технические детали элементов, используемых в XML-файле.
Вы заметите, что есть два дополнительных файла, которые мы еще не упоминали: index.html и tmpl/index.html. Эти файлы добавлены для того, чтобы содержимое папок, в которых они расположены не могло быть просмотрено. Если пользователь попытается открыть в своем браузере эти папки - будет отображаться файл index.html. Эти файлы могут быть пустыми или могут содержать простую строку:
<html><body bgcolor="#FFFFFF"></body></html>
который будет отображать пустую страницу.
Так как наш модуль не использует поля формы раздел config пуст.
Installing and Viewing the Module
To install the module, zip up the parent directory of your source files, to create a file called mod_helloworld.zip. Note that it needs to be a .zip file because the server needs to be able to extract it using Apache's mod_zlib library. Go into Joomla admin, to the Extensions / Manage / Install form, click on the Update Package File tab, and upload your zip file. You should find that the module installs ok. If it doesn't, then compare carefully your code with the code above, and ensure your source code files are named correctly. To make the module visible on your site web pages go into the Extensions / Modules listing and click on the Hello World module to edit it.
- set the Status to Published
- select the Position where the module should appear (if you're unsure about which Position to set, then navigate to Extensions / Templates / Styles, check which template is assigned on your web pages, then follow this guide to finding the module positions).
- on the Menu Assignment tab set the Module Assignment to "On all pages"
Save and Close your edit form. Now if you navigate to your site you should see "Hello, World!" displayed in your chosen module position.
Заключение
Разработка модуля для Joomla! это довольно простой и понятный процесс. Используя методы, описанные в этом учебнике, бесконечное разнообразие модулей может быть разработано без особых хлопот.