Основные Hello World Модуль
Joomla! 1,5 модуль находится в своей основной форме двух файлов: файл XML-конфигурации и файл PHP контроллера. XML-файл конфигурации содержит общую информацию о модуле (как будет показано в Менеджер модулей в Joomla! Интерфейс администрирования), а также параметров модуля, которые могут быть поставлены для тонкой настройки появления / функциональность модуля. Файле PHP обеспечивает контроль логику модуля. Очень простой "Hello World" модуль может ищет что-то вроде этого.
/modules/mod_hello_world/mod_hello_world.xml:
! Примечание: Очень важно, что XML-файл имя совпадает с именем модуля. В противном случае, программа установки будет установлен модуль, но Joomla не будет показывать параметры и дополнительная информация хранится в XML.
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
<!-- Name of the Module -->
<name>Hello World - Hello</name>
<!-- Name of the Author -->
<author>Ambitionality Software LLC</author>
<!-- Version Date of the Module -->
<creationDate>2008-06-23</creationDate>
<!-- Copyright information -->
<copyright>All rights reserved by Ambitionality Software LLC 2008.</copyright>
<!-- License Information -->
<license>GPL 2.0</license>
<!-- Author's email address -->
<authorEmail> Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript </authorEmail>
<!-- Author's website -->
<authorUrl>www.ambitionality.com</authorUrl>
<!-- Module version number -->
<version>1.0.0</version>
<!-- Description of what the module does -->
<description>Provides a basic "Hello World" notice</description>
<!-- Listing of all files that should be installed for the module to function -->
<files>
<!-- The "module" attribute signifies that this is the main controller file -->
<filename module="mod_hello_world">mod_hello_world.php</filename>
<filename>index.html</filename>
</files>
<!-- Optional parameters -->
<params />
</install>
В основном, этот файл XML только строки из основную информацию о модуле, например в качестве владельца, версии и т.д. для идентификации Joomla! установки, а затем предоставляет дополнительные параметры, которые могут быть установлены в модуль менеджера и доступе из логики модуля для тонкой настройки ее поведения. Кроме того, этот файл говорит установки, какие файлы должны быть скопированы и установлены. Обратите вним
/modules/mod_hello_world/mod_hello_world.php:
<?php
//не позволяют другие сценарии, чтобы захватить и выполнить наш файл
defined('_JEXEC') or die('Direct Access to this location is not allowed.');
?>
<p>
Hello World
</p>
Что происходит, когда этот модуль загружается в том, что Joomla! включает в себя (с помощью PHP включают директивы) файл mod_hello_world.php и сохраняет результат в выходной буфер, который затем отображены на странице вывода. Этот файл будет просто произвести
Hello World
на последней странице.
<html><body bgcolor="#FFFFFF"></body></html>
Это действительно просто помогает гарантировать, что страницы по умолчанию отображается, если прямой доступ к каталогу является попытка без прохождения процедуры листинга все другие файлы в каталоге. Это не необходимо, но является хорошей практикой.
Чтобы упаковать этот модуль для распространения и установки, просто ZIP файлы вместе, например,
% cd mod_hello_world
% zip mod_hello_world.zip mod_hello_world.php mod_hello_world.xml index.html
В результате mod_hello_world.zip файл может быть загружен и установлен через стандартный Joomla! 1,5 Extension Manager.
Реальный Joomla! 1,5 стиля Модуль Осуществление
Теперь, когда было легко ... слишком легко. В самом деле, что было в значительной степени простая форма модуля возможно. В действительности модуль, вероятно, будет делать что-то гораздо более значительным. Давайте предположим, что наши модули будет более сложным - нам необходимо воспользоваться MVC (Model View Controller) шаблон проектирования и рассмотреть вопрос об использовании следующий формат файла для "Hello World 2" модуль, вместо:
/modules/mod_hello_world2/index.html
/modules/mod_hello_world2/mod_hello_world2.php
/modules/mod_hello_world2/mod_hello_world2.xml
/modules/mod_hello_world2/helper.php
/modules/mod_hello_world2/en-GB.mod_hello_world2.ini
/modules/mod_hello_world2/tmpl/index.html
/modules/mod_hello_world2/tmpl/default.php
Различия отметить здесь, что Существуют три дополнительных файлов вне того, что "Hello World" модуль был, а именно helper.php, TMPL / default.php, и ан-GB.mod_hello_world2.ini файл. Цель сложения первых двух файлов в два раза. Во-первых, мы разделяем логику модуля в helper.php файла убедитесь, что все мысли и доступа к данным осуществляется здесь и выделить презентацию модуля / шаблон в TMPL / default.php файл ((X) HTML). Я утверждаю, что это просто хорошие программирования - разделение логики от представления. Существует Второе преимущество этого, однако, что в том, что это позволит HTML / презентация быть легко переопределен любым Joomla! 1,5 шаблон для оптимальной интеграции в любой сайт. (Переопределение модуль и компонент презентации в шаблонах выходит за рамки данной статьи, однако, он должен рассматриваться как это действительно полезно).
Давайте посмотрим, что эти файлы могут выглядеть и обсудить, что происходит.
/modules/mod_hello_world2/mod_hello_world2.php:
<?php
//не имеет прямого доступа
defined('_JEXEC') or die('Direct Access to this location is not allowed.');
// включать вспомогательные файл
require_once(dirname(__FILE__).DS.'helper.php');
// получить параметр из конфигурации модуля
$userCount = $params->get('usercount');
// получить элементов для отображения из вспомогательные
$items = ModHelloWorld2Helper::getItems($userCount);
// включить шаблон для отображения
require(JModuleHelper::getLayoutPath('mod_hello_world2'));
?>
Важные различия, которые надо запомнить, что (1), включают вспомогательные файл, который будет работать лошадь нашей логики и доступа к данным и (2) один раз у нас есть данные, мы просто загружаем шаблон, который будет использовать наши данные и сделать это, как считает нужным.
/modules/mod_hello_world2/mod_hello_world2.xml
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
<!-- Name of the Module -->
<name>Hello World 2 - Hello</name>
<!-- Name of the Author -->
<author>Ambitionality Software LLC</author>
<!-- Version Date of the Module -->
<creationDate>2008-06-23</creationDate>
<!-- Copyright information -->
<copyright>All rights reserved by Ambitionality Software LLC 2008.</copyright>
<!-- License Information -->
<license>GPL 2.0</license>
<!-- Author's email address -->
<authorEmail> Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript </authorEmail>
<!-- Author's website -->
<authorUrl>www.ambitionality.com</authorUrl>
<!-- Module version number -->
<version>1.0.0</version>
<!-- Description of what the module does -->
<description>Provides a random listing of registered users</description>
<!-- Listing of all files that should be installed for the module to function -->
<files>
<!-- The "module" attribute signifies that this is the main controller file -->
<filename module="mod_hello_world2">mod_hello_world2.php</filename>
<filename>index.html</filename>
<filename>helper.php</filename>
<filename>tmpl/default.php</filename>
<filename>tmpl/index.html</filename>
</files>
<languages>
<!-- Any language files included with the module -->
<language tag="en-GB">en-GB.mod_hello_world2.ini</language>
</languages>
<!-- Optional parameters -->
<params>
<!-- parameter to allow placement of a module class suffix for the module table / xhtml display -->
<param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="PARAMMODULECLASSSUFFIX" />
<!-- just gives us a little room between the previous parameter and the next -->
<param name="@spacer" type="spacer" default="" label="" description="" />
<!-- A parameter that allows an administrator to modify the number of users that this module will display -->
<param name="usercount" type="text" default="5" label="LABEL USER COUNT" description="DESC USER COUNT" />
</params>
</install>
Основные различия отметить здесь, что мы добавили языку файл (мы могли бы добавить еще), и мы добавили некоторые параметры.
/modules/mod_hello_world2/helper.php:
<?php
defined('_JEXEC') or die('Direct Access to this location is not allowed.');
class ModHelloWorld2Helper
{
/**
* Returns a list of post items
*/
public function getItems($userCount)
{
//получить ссылку на базу данных
$db = &JFactory::getDBO();
// получить список из $ userCount случайно упорядоченное пользователей
$query = 'SELECT a.name FROM `#__users` AS a ORDER BY rand() LIMIT ' . $userCount . '';
$db->setQuery($query);
$items = ($items = $db->loadObjectList())?$items:array();
return $items;
} //конец GetItems
} //конец ModHelloWorld2Helper
?>
Это вспомогательный класс (отметим, что он назван по имени модуля, чтобы он не конфликтует с другими именами класса) просто возвращает список всех пользователей в базе данных и случайным образом выбирает подмножество тех, основываясь на количестве поставляются в $ userCount .
/modules/mod_hello_world2/tmpl/default.php:
<?php defined('_JEXEC') or die('Restricted access'); // не имеет прямого доступа ?>
<?php echo JText::_('RANDOM USERS'); ?>
<ul>
<?php foreach ($items as $item) { ?>
<li>
<?php echo JText::sprintf('USER LABEL', $item->name); ?>
</li>
<?php } ?>
</ul>
Здесь мы просто создаем неупорядоченного списка HTML, а затем перебора элементов, возвращенных наши вспомогательные (в mod_hello_world2.php), вывод сообщения с именем каждого пользователя.
/modules/mod_hello_world2/en-GB.mod_hello_world2.ini:
LABEL USER COUNT= количество пользователей
DESC USER COUNT=количество пользователей для отображения
RANDOM USERS=Random пользователя для Hello World2
USER LABEL=%s является случайно выбранных пользователей
Здесь мы просто определить строки, которые появляются в файле конфигурации модуля и модуля шаблонов, которые появляются в JText:: _ или JText:: Sprintf заявления. Это позволяет кому-то легко написать новый языковой файл без редактирования любой HTML или код для модуля.
Теперь все мы должны сделать, это ZIP эти файлы, как в:
% pwd
/somesite/modules/mod_hello_world2
% zip -r ../mod_hello_world2.zip *
% ls ..
mod_hello_world2.zip
В результате mod_hello_world2.zip файл готов для установки и распространения. Когда файл ZIP установлено, EN-GB.mod_hello_world2.ini файл копируется в / language/en-GB/en-GB.mod_hello_world2.ini и загружается каждый раз загружен модуль. Все другие файлы копируются в / modules/mod_hello_world2 подпапках Joomla! установки.
Joomla! 1,5 Установка базы данных использование
Модули как правило, не взаимодействуют с базой данных, за исключением обычных операций (SELECT, UPDATE, INSERT, DELETE). Но в некоторых случаях это может быть необходимо изменить или даже создавать таблицы, хотя это не рекомендуется. Существует не общепринятая практика в этом, но вот один из способов сделать именно это:
Добавить модуль параметра, что проявляется:
<params group="advanced">
<param name="is_installed" type="radio" default="0" label="Is module installed?" description="Only use this if you know the consequences! Click No to recreate database">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
</params>
Затем вы можете использовать параметр для переключения состояния. Поскольку параметры модуля уже загружается из базы данных на данный момент, никаких накладных не должен быть заметен этот путь.
// Если рассматривать это в функциональный модуль.
function myModuleReInstall() {
if (!$params->get('is_installed')) {
$database =& JFactory::getDBO();
$query = "CREATE TABLE IF NOT EXISTS `example` ( `id` INT, `data` VARCHAR(100) );";
$database->setQuery($query);
$result = $database->query();
$params->set('is_installed', 1);
}
}
Это означало, в качестве примера и может быть продлен по-разному. Однако - Если вы сделаете это, вы также должны спросить себя, если это правильный способ делать вещи. Компоненты имеют реальные инсталляторов и это может быть лучшим решением, хотя модуль может быть быстрее делать.
