Создание простого модуля для Joomla

 

Создание простого модуля для Joomla

 

Модуль Joomla Joomla! 3.х строится с помощью трех разных приложений:

  • установщик (используется для установки модулей Joomla)
  • администраторская часть (используется для управления содержимым)
  • пользовательская часть (используются для отображения контента)

Установщик используется один раз. Администраторская и пользовательская часть являются основой "компонентов" и "модулей". Каждый модуль использует единую точку входа, расположенную в каталоге "modules". Она называется mod_modulename/modulename.php (префикс mod_ сложился исторически)

Этот учебник объяснит, как создать простой модуль "Привет мир". С помощью данного руководства вы узнаете основную файловую структуру модуля. Затем эта базовая структура может быть расширена, чтобы произвести более сложные модули.

Файловая Структура

Существует четыре основных файла, которые используются в стандартном шаблоне разработки модуля:

  • 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 пуст.