Создание модуля часть 2

04/06/2009 Создание модуля Joomla 1.5

В первой части был продемонстрирован приметивный модуль, который фактически ничего не делал. Теперь рассмотрим более сложный модуль с использованием MVC. Итак второй модуль назовем "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

Как можно заметить различия состоит в том, что появилось 3 дополнительных файла: helper.php, tmpl/default.php, и en-GB.mod_hello_world2.ini. Цель в добавлении первых двух файлов является двоякой. Во-первых вся логика и доступ к БД будет осуществлятся в файле helper.php. Во-вторых появится шаблон вывода информации  (/tmpl/default.php). Такое разделение очень полезно, так как не затрагивая логику, можно будет легко переделать шаблон под свой сайт.

/modules/mod_hello_world2/mod_hello_world2.php:

 

<?php
//no direct access
defined('_JEXEC') or die('Direct Access to this location is not allowed.');
 
// подключаем файл helper.php
require_once(dirname(__FILE__).DS.'helper.php');
 
// берем параметры из файла конфигурации
$userCount = $params->get('usercount');
 
// берем items из файла helper
$items = ModHelloWorld2Helper::getItems($userCount);
 
// подключаем шаблон для отображения
require(JModuleHelper::getLayoutPath('mod_hello_world2'));

Важное отличие здесь является в том что мы подключаем вспомогательный файл helper.php, который будет "рабочей лошадкой" для нашего модуля. Вся логика и работа с данными будет происходит в нем, затем передоваться в шаблон вывода, который будет использовать данные по своему усмотрению.

/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>info@ambitionality.com</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 paramter 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
 
} //end SimplestForumLatestPostsHelper

Этот вспомогательный класс (замедьте он называется так же как называется модуль) просто возвращает список случайных (random) пользователей, ограниченный количеством $userCount.

/modules/mod_hello_world2/tmpl/default.php:

<?php defined('_JEXEC') or die('Restricted access'); // no direct access ?>
<?php echo JText::_('RANDOM USERS'); ?>
<ul>
<?php foreach ($items as $item) { ?>
<li>
<?php echo JText::sprintf('USER LABEL', $item->name); ?>
</li>
<?php } ?>
</ul>

Здесь просто с помощью цикла распечатывается список имен пользователей, полученных от помощника (helper.php).

/modules/mod_hello_world2/en-GB.mod_hello_world2.ini:

LABEL USER COUNT=Счетчик пользователя
DESC USER COUNT=Количество пользователей
RANDOM USERS=Случайные пользователи для Hello World2
USER LABEL=%s это случайный список пользователей

Здесь мы просто идентифицируем строки, которые появляются в файле конфигурации модуля и шаблоне модуля (операторы JText:: _ или JText:: sprintf). Это позволяет легко локализовать (перевести) модуль на любой язык не затрагивая основные файлы .


Вложения:
mod_hello_word2.zip[ ] (1231) Загрузок

13 

Комментарии   

 
+3 JohnnySuperb
17.10.2010 14:48
Вот эта статья для меня оказалась куда полезней, чем первая. А ошибки все также остались. Плохо, что автор не отвечает на комментарии.
 
 
+3 turbovitalik
18.01.2011 12:01
спасибо за статью. я - новичок в этом деле и кое-что прояснилось...
 
 
+1 Mika
08.03.2011 00:26
Почитал обе статьи на эту тему. Спасибо за разъяснения и урок. Только у меня пока что ума не хватает сделать то, что мне нужно.
Вы можете помочь или сделать на заказ модуль?
 
 
0 Zhanik
25.05.2011 11:49
Супер классная статья!!!!
 
 
-1 Анатолий
22.09.2012 18:08
За содержание статьи спасибо.
Но вот с орфографией...
Впрочем, как и у меня...
Правильно писать "передАваться", а не "передОваться".
 
 
-1 Анатолий
22.09.2012 18:12
Писать нужно "замеТьте", а не "замеДьте".
Глядишь, может так общими усилиями весь текст и выправим. ;)
 
 
0 Анатолий
22.09.2012 18:14
Большое спасибо, что прояснил использование локализации.
 
 
0 Yulduz
02.09.2013 11:59
Большое спасибо,