pack2Правильная шаблонизация любой части сайта - это простота разработки и удобство управления сайтом в будущем. Этот вопросы и еще некоторые мелочи (например, создание ссылок на материалы) мы разберем на примере создания модуля, который будет выводить случайный список последних материалов.

Разделение кода модуля

Все что мы делали до этого в предыдущих статьях по написанию модулей - это каша из кода. В одном файле разом происходят: запрос к базе данных, преобразование данных, логика модуля, подстановка полученной информации в html-код. Если сейчас вам кажется что код маленький и простой, то продолжая в таком духе это все превратится в кашу. Особенно много сложностей возникнет, когда вы после небольшого перерыва решите что-нибудь изменить.

Для внутреннего упрощения модуля, попробуем разделить его код на некоторые логические части, а именно - шаблон и helper. Шаблон будет отвечать за верстку, html-код. Helper - это класс помощник, который будет содержать в себе выборку из базы данных и форматирование данных так, чтобы их только осталось вставить в html.

Теперь PHP-файл выглядит следующим образом:


<?php
defined('_JEXEC') or die('Restricted access');

// Подключаем локальный helper
require_once(dirname(__FILE__).DS.'helper.php');

// Вызываем метод
$link = modRandomLatestHelper::getList($params);

// подключаем файл шаблона с помощью класса JModuleHelper
require(JModuleHelper::getLayoutPath('mod_ranlatest'));
?>

А фaйл helper.php будет выглядеть так:


<?php
defined('_JEXEC') or die('Restricted access');

// Используем route.php для создания ссылок на контент
require_once (JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php');

class modRandomLatestHelper
{
function getList(&$params)
{
// Получаем значение параметров
$psecid = trim($params->get("secid"));
$panum = (int) trim($params->get("articlenum"));
$pfront = $params->get("front", 0);
$pptext = trim($params->get("pretext"));
$mcsuffix = trim($params->get("stylesfx"));

// Получаем глобальный объект базы данных
$db =& JFactory::getDBO();

// Собираем sql-запрос
if ($psecid)
{
$arrsecid = explode(",", $psecid);
JArrayHelper::toInteger($arrsecid);
$CondA = " AND (sectionid = " . implode(' OR sectionid = ', $arrsecid ) . ")";
}
if (!$pfront) $CondB = " AND id NOT IN (select content_id from #__content_frontpage)";
if ($panum) $Lim = "LIMIT 0, $panum";

$query = "SELECT id, catid, sectionid, title FROM #__content WHERE state=1" .
($psecid ? $CondA : '') . ($pfront ? '' : $CondB) .
" ORDER BY created ASC $Lim";

// Выполняем запрос и получаем массив объектов
$db->setQuery($query);
$rows = $db->loadObjectList();
if (!$db->getErrorNum())
{
if (!empty($rows))
{
$ranitem = rand(0,count($rows)-1);
$link = array();
$link[0] = $pptext;
$link[1] = $rows[$ranitem]->title;
// Создаем ссылку на контент с помощью ранее подключенного роутера (route.php)
$link[2] = ContentHelperRoute::getArticleRoute($rows[$ranitem]->id,
}
}

// Возвращаем массив ссылок и заголовков
return $link;
}
}

?>


Шаблон, который подключается с помощью getLayoutPath - обычно должен располагаться по адресу /tmpl/default.php, либо переопределяется из соотвествующей директории в основном шаблоне сайта. (в нашем случаем его переопределит файл /templates/YOU_TEMPLATE/html/mod_MODULENAME/default.php ). Таким образом, если организовывать файлы так, как описано выше, то мы получим очень удобную и гибкую систему шаблонов для модуля.

Посмотрим на содержимое файла default.php:


<?php if ($link[0]) : ?>
<p class="ranlatest<?php echo $params->get('stylesfx'); ?>">
<?php print $link[0] ?>
</p>
<?php endif; ?>
<a class="ranlatest<?php echo $params->get('stylesfx'); ?>"
href="/<?php print $link[2] ?>"><?php print $link[1] ?></a>

 

Несколько шаблонов в одном модуле

Добавим несколько строк в xml файл модуля Joomla:


<param name="layout" type="list" default="random"
label="Layout"
description="The layout to display the link">
<option value="default">Default</option>
<option value="divmania">Div-mania</option>
<option value="oldschool">Old-school</option>
</param>


В основном PHP-файле (mod_ranlatest.php) изменим последнюю строку на следующую :


$layout = $params->get('layout', 'default');
require(JModuleHelper::getLayoutPath('mod_ranlatest', $layout));


Добавим в папку шаблонов (/modules/mod_ranlatest/tmpl/) соответствующие файлы:

файл divmania.php - верстка с использованием div'ов


<div class="ranlatest<?php echo $params->get('stylesfx'); ?>">
<?php if ($link[0]) : ?>
<p><?php print $link[0] ?></p>
<?php endif; ?>
<a href="/<?php print $link[2] ?>"><?php print $link[1] ?></a>
</div>


и файл oldschool.php - вариант табличной верстки


<table class="ranlatest<?php echo $params->get('stylesfx'); ?>">
<?php if ($link[0]) : ?>
<tr><td>
<?php print $link[0] ?>
</td></tr>
<?php endif; ?>
<tr><td>
<a href="/<?php print $link[2] ?>"><?php print $link[1] ?></a>
</td></tr>
</table>

__________________________________________________________________________________________________________________

скачать joomla | обновление joomla | модуль joomla | администрирование | seo продвижение | joomla магазиншаблоны сайтов

обратная связь 

При копировании материала ссылка на сайт joomla4.ru обязательна.