Создание модуля для Joomla 1.5
05.06.2009 19:29
В сети есть много примеров создания модуля Hello World, но это зачастую не является главной целью для человека впервые захотевшего сделать свой модуль. Обычно задача его состоит в том чтобы вывести какие то данные из БД, которые не были предусмотрены обычными стандартными модулями Joomla.
Для этого создадим каталог и положим туда любой файл index.html ( находящийся в любой папке любого модуля Joomla ), чтобы избежать прямого попадания в директорию. Если вы не хотите мучаться с установкой его, а Joomla есть у вас на локалхосте, то можете создать папку вашего модуля сразу в папке modules, после создания всех файликов, сможете сразу зайти в админку, в панель управления модулями, кликнуть «создать» и он будет отображен в списке и готов к включению…

Например модуль будет называться mod_my. Его задача будет отобразить список юзеров из БД и ограничить его количеством заданным собственноручно из админки в управление данным модулем.

Минимальный набор файлов для полноценной работы модуля:
/modules/mod_my/index.html
/modules/mod_my/mod_my.php
/modules/mod_my/mod_my.xml
/modules/mod_my/helper.php
/modules/mod_my/tmpl/index.html
/modules/mod_my/tmpl/default.php


Данный модуль использует архитектуру MVC(Model, View, Controller — Модель, Представление, Контроллер).
Во-первых, мы отделяем логику модуля(контроллер) в файл helper.php, чтобы вся работа с данными производилась только там. Представление(View)/шаблон, (X)HTML же мы вынесем в tmpl/default.php. Это хороший стиль программирования — отделять логику от представления.

Теперь приступим к созданию файлов. Начнем с файла mod_my.php
<?php
//no direct access
defined('_JEXEC') or die('Direct Access to this location is not allowed.');

// include the helper file
require_once(dirname(__FILE__).DS.'helper.php');

// get a parameter from the module's configuration
$userCount = $params->get('usercount');

// get the items to display from the helper
$items = ModMyHelper::getItems($userCount);

// include the template for display
require(JModuleHelper::getLayoutPath('mod_my'));

?>


Основные этапы работы данного файла:
  • Мы включаем(include) файл helper.php, который будет нашей рабочей лошадкой при работе с логикой модуля и данными.
  • После того, как мы получаем данные, мы просто загружаем шаблон, который использует наши данные и отображает их.


Следующий файл, mod_my.xml, будет содержать описание модуля и некоторые его настройки:
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
    <!-- Name of the Module -->
        <name>Мой модуль</name>

    <!-- Name of the Author -->
        <author>Nick</author>

    <!-- Version Date of the Module -->
        <creationDate>2009-03-30</creationDate>

    <!-- Copyright information -->
        <copyright>Копирайт</copyright>

    <!-- License Information -->
        <license>GPL 2.0</license>

    <!-- Author's email address -->
        <authorEmail>
  Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
 </authorEmail>

    <!-- Author's website -->
        <authorUrl>www..com</authorUrl>

    <!-- Module version number -->
        <version>1.0.0</version>

    <!-- Description of what the module does -->
        <description>Всякая </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_my">mod_my.php</filename>
                <filename>index.html</filename>
                <filename>helper.php</filename>
                <filename>tmpl/default.php</filename>

                <filename>tmpl/index.html</filename>
        </files>

  
    <!-- 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="Число юзеров" description="Укажите число юзеров" />

    </params>
</install>


Сам же helper.php, будет содержать непосредственно код запроса:
<?php
defined('_JEXEC') or die('Direct Access to this location is not allowed.');

class ModMyHelper
{
    /**
     * Returns a list of post items
    */
    public function getItems($userCount)
    {
        // get a reference to the database
        $db = &JFactory::getDBO();

            // get a list of $userCount randomly ordered users
        $query = 'SELECT a.name FROM `#__users` AS a LIMIT ' . $userCount  . '';

        $db->setQuery($query);
        $items = ($items = $db->loadObjectList())?$items:array();

        return $items;

       
    } //end getItems

} //end SimplestForumLatestPostsHelper

?>


Он просто получает список пользователей из БД и случайным образом заполняет массив подмножеством пользователей, размерность которого задана через параметр модуля и передаётся в метод getItems через параметр $userCount.

И наконец, чтобы все это отображалось простейшим списком, мы создаем файлик tmpl/default.php
<?php defined('_JEXEC') or die('Restricted access'); // no direct access ?>

<ul>
  <?php foreach ($items as $item) { ?>
    <li>

        <?php echo $item->name; ?>
    </li>
    <?php } ?>

</ul>



В итоге мы получаем полностью рабочий модуль, простейшего содержания, но имеющий подключение к БД и пример его реализации! Далее вы конечно можете его заархивировать в ZIP и он будет готов к установке в любую joomla 1.5
 

Комментарии 

 
+3 #31 Михаил 2011-06-23 13:32 Супер, автор - умница Цитировать
 
 
0 #32 greeb 2011-06-29 00:51 все работает спасибо, но возможно ли вытаскивать не имя а логин…спаисба зараннее… Цитировать
 
 
+2 #33 nadya 2011-06-30 12:07 Цитирую greeb:
все работает спасибо, но возможно ли вытаскивать не имя а логин…спаисба зараннее…


Конечно можно, замените name на username в helper.php и в tmpl/default.php

Автору спасибо! Коротко и ясно
Цитировать
 
 
0 #34 SPolischook 2011-07-16 02:41 Спасибо, толково написали.
Я наконец разобрался как работает ООП в модулях Джумлы.
Цитировать
 
 
0 #35 lottis 2011-08-17 03:20 Спасибо! Написанно хорошо, разобрался, написал модуль вывода цитат из БД. Легко и просто!) Цитировать
 
 
0 #36 mickey 2011-12-01 13:44 lottis можешь кинуть модуль с выводом цитат из бд? Цитировать
 
 
0 #37 reww 2011-12-08 16:08 не могу понять как подключить свой, не относящийся к джумле, параметр из б.д. Цитировать
 
 
0 #38 Сергей 2011-12-20 00:01 Коротко и ясно. Спасибо, помогли! Цитировать
 
 
0 #39 эрика 2012-01-15 12:39 Цитировать
 
 
-1 #40 Тарас 2012-01-23 06:21 дайте ссылку на скачивание) Цитировать
 

Добавить комментарий

Защитный код
Обновить

На сайте

Сейчас 10 гостей онлайн