Пример настроек которые мы реализуем.

sozdanie-modulya-j25

Заготовка

В первом шаге мы создадим заготовку для будущего модуля, её можно будет использовать всякий раз при создании нового модуля. Не пугайтесь всех тегов и объёма информации на самом деле всё просто, моя задача разложить весь процесс на порции. Создайте папку mod_categories 

Перечень файлов в папке mod_categories:

  1. index.html
  2. helper.php
  3. mod_categories.php
  4. mod_categories.xml
  5. ru-RU.mod_categories.ini
  6. en-GB.mod_categories.ini
  7. categories.css
  8. tmpl/index.html
  9. tmpl/default.php

Назовите модуль оригинальным именем, у нас он имеет название categories, потому файлы mod_categories.php,  mod_categories.xml, ru-RU.mod_categories.ini, en-GB.mod_categories.ini имеют название с приставкой categories. Иначе если написать другое имя могут возникнуть проблемы.

Всё этого достаточно для создания модуля. В следующем шаге мы будем заполнять файлы.

Скачать заготовку

Установка mod_categories.xml

Откройте файл mod_categories.xml и поместите в него следующий код. Код прокомментирован.

 

<?xml version="1.0" encoding="utf-8"?>
<!--Что устанавливаем модуль компонент или плагин и для какой версии-->
<extension type="module" version="2.5" client="site" method="upgrade">
<!--Имя компонента отображаемое в модулях-->
<name>Priceleaf shop категории</name>
<!--Дата создания-->
<creationDate>Март 2012</creationDate>
<!--Кто автор!?-->
<author>Ваня</author>
<!--Копирайты по желанию-->
<copyright>All rights reserved</copyright>
<!--Лицензия-->
<license>GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html</license>
<!--Версия модуля-->
<version>2.0.0</version>
<!--Описание модуля-->
<description>Модуль категории priceleaf shop</description>
<!--Перечисляем какие файлы нужно установить-->
<files>
<filename module="mod_categories">mod_categories.php</filename>
<folder>tmpl</folder>
<filename>index.html</filename>
<filename>helper.php</filename>
</files>
<!--Устанавливаем языковые файлы-->
<languages>
<language tag="ru-RU">ru-RU.mod_categories.ini</language>
<language tag="en-GB">en-GB.mod_categories.ini</language>
</languages>
 
<!--А это уже те самые параметры которые мы увидим в настройках модуля-->
<config>
<fields name="params">
<fieldset name="basic">
<field
name="styletype"
type="list"
default="1"
label="COM_MODULES_NTG_FIELDSET_LABEL_NAME"
description="COM_MODULES_NTG_FIELDSET_LABEL_OPISANIE">
<option value="1">Пример 1</option>
<option value="2">Пример 2</option>
</field>
</fieldset>
<fieldset name="NTG">
</fieldset>                
<fieldset name="advanced">
<field
name="cache_time"
type="text"
default="900"
label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
description="COM_MODULES_FIELD_CACHE_TIME_DESC" />
</fieldset>
</fields>
</config>
</extension>


 

Рассмотрим подробнее параметры настроек, думаю такие параметры как имя и установка файлов не вызовут проблем: <config></config> Параметры конфигурации настроек.

Дальше <fields name="params"></fields> с этого тега мы обозначаем что тут нужно вывести параметры настроек для модуля. В них уже помещаем специальные теги <fieldset name="basic"></fieldset> basic это Основные параметры модуля, так же ещё имеется параметр <fieldset name="advanced"> это Дополнительные параметры.

Эти параметры зарезервированы joomla потому как она встретит она выведет названия для них.

Что бы создать какой либо свой блок то нужно написать так <fieldset name="NTG"></fieldset> имя можно поставить любое это пример. Что бы вывести имя блока в языковом файле нужно написать COM_MODULES_NTG_FIELDSET_LABEL="Имя отдельных настроек" 

Такие параметры как field name="styletype" это сами настройки, которыми можно управлять.

  1. name="styletype" имя нашего параметра, потом это имя мы будем проверять в шаблоне.
  2. type="list" параметр выпадающий список. Параметры могут быть разные, текстовое поле, чекбоксы и.т.д
  3. default="1" что будет выводить по умолчанию параметр 1 Пример 1.
  4. label="COM_MODULES_NTG_FIELDSET_LABEL_NAME" имя поля
  5. description="COM_MODULES_NTG_FIELDSET_LABEL_OPISANIE" описание поля
  6. <option value="1">Пример 1</option> это параметры нашего модуля.

Такие параметры как кеширование name="cache_time" это родные joomla функции. Их там много, но они особо ненужны. Но параметр кеш можно оставить. Есть родной параметр moduleclass_sfx, class_sfx, суффикс класса модуля, всё суффиксы можно поискать в интернете или полазить в xml родных модулей joomla.

Может щас Вам это не совсем понятно, но к концу урока если вы его читаете не с перерывом в 2- 3 дня станет всё понятно. Вообще эти параметры в joomla можно использовать и в компонентах и в плагинах.

Модель helper.php

Это модель модуля, такой же принцип используется и для компонента. В ней ничего сложного нет, код прокомментирован, но если вы желаете подробнее узнать структуру то можете изучить создание компонента для joomla 2.5 но это долго, гораздо сложнее и требует терпения, ссылка выше.

 

<?php
defined('_JEXEC') or die('Direct Access to this location is not allowed.');
 
class ModCategoriesHelper
{
 
  public function getItems($userCount)
{
 
  //Подключение к бд joomla
  $db = JFactory::getDBO();
 
  //Выбираем из какой таблицы будем вытаскивать данные
  $query = 'SELECT * FROM #__priceleafshop_razdel';
  $db->setQuery($query);
  $items = $db->loadObjectlist();
  return $items;  
 
} 
 
 
    public function getcats($userCount)
{
 
  //Подключение к бд joomla
  $db = JFactory::getDBO();
 
  //Выбираем из какой таблицы будем вытаскивать данные
  $query = 'SELECT * FROM #__priceleafshop_cat';
  $db->setQuery($query);
  $cats = $db->loadObjectlist();
  return $cats;  
}   
 
 
public function getnas($userCount)
{
 
  //Подключение к бд joomla
  $db = JFactory::getDBO();
 
  //Выбираем из какой таблицы будем вытаскивать данные
  $query = 'SELECT * FROM #__priceleafshop_na';
  $db->setQuery($query);
  $nas = $db->loadObjectlist();
  return $nas;  
}   
 
 
 
 
}

 

 

Создаём класс class ModCategoriesHelper и с помощью него будем передавать данные в шаблон. Указываем параметры для вывода из базы данных public function getcats($userCount) их можно создавать сколько угодно главное менять имена getcats.

Таким образом можно тащить данные с любых таблиц в вашей бд, обрабатывать их, пример тому я вытаскиваю данные из своего компонента. 

Точка входа mod_categories.php

Точка входа это как входная дверь в дом, только через неё можно попасть в дом. В нём указываются классы для работы с таблицами в бд, а затем уже через файл helper.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 = ModCategoriesHelper::getItems($userCount);
 
// берем cats из файла helper
$cats = ModCategoriesHelper::getcats($userCount);
 
// берем nas из файла helper
$nas = ModCategoriesHelper::getnas($userCount);
 
// подключаем шаблон для отображения
require(JModuleHelper::getLayoutPath('mod_categories'));


 

Особо тут рассматривать нечего, главное запомнить что при создании нового запроса в файле нужно указать $cats = ModCategoriesHelper::getcats($userCount); $cats переменная которая будет работать с бд, а getcats это тот параметр который вы указываете в helper.php.

 

Языковой файл ru-RU.mod_categories.ini

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


COM_MODULES_NTG_FIELDSET_LABEL="Имя отдельных настроек"
COM_MODULES_NTG_FIELDSET_LABEL_NAME="Выбор параметра"
COM_MODULES_NTG_FIELDSET_LABEL_OPISANIE="Выберите 1 из двух вариантов"

Шаблон tmp/default.php

Шаблон это конечный результат нашей с вами работы. Рассмотрим самое важное как же эти настройки которые мы задали в админке вывести в модуле. А вот как помните мы указали имя блоку field name="styletype" так вот получаем его через $styletype=$params->get('styletype',''); затем можно делать проверку через оператор if ($styletype==1) {Обработка кода} проверки можно делать разные всё зависит от конкретного случая. Данные получаем так в helper.php мы указали $items = $db->loadObjectlist(); это цикл вывода массива. Тоесть данные  поместил в массив и мне нужно их вывести, а выводим мы их через цикл foreach ($items as $item ) {echo $item->id; } а обработка и формирование данных по вашему желанию.

<?php defined('_JEXEC') or die('Restricted access'); // запрет к прямому обращению ?>
 
<link rel="stylesheet" type="text/css" href="/modules/mod_categories/categories.css">
<div id="linked-active">
<ul>
 
<?php
//Помещаем в $urlload адресную строку
$urlload=$_SERVER['QUERY_STRING'];
//Выводим список разделов
 
$styletype=$params->get('styletype','');
 
if ($styletype==1) {
  foreach ($items as $item )
{
  //Проверяем совпадает выбранная страница с адресной строкой, если да то выделяем её красным цветом. 
  $urlall = 'view=priceleaf&id='.$item->id.'';
 
 
//---->>
if ($urlload==$urlall) 
{
echo '<li><a class="linc-aktiv-none" href="/component/priceleafshop/?view=priceleaf&id='.$item-&gt;id_'=">
<font color="red">'.$item->name.'</font></a></li>'; //При проверке выводим принадлежащие категории. foreach ($cats as $cat ) { if ($item->id==$cat->raz_cat) { //Вывод количества новостей $sdgf=0; foreach ($nas as $na) { if ($cat->id==$na->cat_naimenovanie) { $sdgf++; }} echo '<a class="linc-aktiv-none" href="/component/priceleafshop/?view=cat&id='.$cat-&gt;id_'=">'.$cat->name_cat.'</a> ('.$sdgf.')<br>'; }}} //<<---- //---->> else { echo '<li><a class="linc-aktiv-none" href="/component/priceleafshop/?view=priceleaf&id='.$item-&gt;id_'=">'.$item->name.'</a></li>'; //При проверке выводим принадлежащие категории. foreach ($cats as $cat ) { //Проверяем адрес для подсветки ссылки $urlcat = 'view=cat&id='.$cat->id.''; if ($item->id==$cat->raz_cat) { if ($urlload==$urlcat) { //Вывод количества новостей $sdgf=0; foreach ($nas as $na) { if ($cat->id==$na->cat_naimenovanie) { $sdgf++; }} echo '<a class="linc-aktiv-none" href="/component/priceleafshop/?view=cat&id='.$cat-&gt;id_'=">
<font color="red">'.$cat->name_cat.'</font></a> ('.$sdgf.')<br><br>'; }}}} //<<---- } } else {
echo "Второй вариант который вы выбрали в настройках, сюда можно можно поместить любой код. Скажем вывести данные из другой таблицы";
} ?> </ul> </div>

Файл index.html можно заполнить так.

<html><body bgcolor="#FFFFFF"></body></html>