Как стать автором
Обновить

Создание простейшего модуля на Joomla 1.5.# (с использованием подключения к БД)

Время на прочтение4 мин
Количество просмотров2.2K
В сети есть много примеров создания модуля 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>info@info.com</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
Комментарии5

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн