•  
  •  
  •  
  •  
1 1 1 1 1 1 1 1 1 1 Рейтинг 5.00 (1 Голос)
Создание шаблонов модулей - 5.0 out of 5 based on 1 vote

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

Как разделяется код модуля

Все что нами осуществлено до этого, благодаря  предыдущим статьях в контексте написания модулей, является кашей из кода. Один файл используется одновременно для: запроса для базы данных, преобразования данных, логики модулей, подстановки полученных данных в 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>
Портфолио
Память о Вас и Ваших близких на многие поколения
Подробнее
Прокат металла
Подробнее
Интернет-магазин кожи и меха
Подробнее
100% оригинальная парфюмерия в Москве
Подробнее
Вьетнамский ресторан премиум класса
Подробнее
Внедрение информационных систем
Подробнее
Организация международных конференций
Подробнее
Производство молочной продукции
Подробнее
Спортивный сайт
Подробнее
Интернет-магазин мебели и аксессуаров
Подробнее
Интернет-магазин электротранспорта
Подробнее
Сайт института актуальной экономики
Подробнее
Наши клиенты
Парк развлечений Boom Zoom
Алгор
Норбит
Molga Consulting
Metrotile
Нетология
Monqi
Премиум Пак
Aasha Herbals
Аджва
Салон красоты Сударушка
Пава
ТЦ &quot;Панфиловский&quot;
Фитнес Лаборатория
Система Главбух
Vanguard
GoAsia
ТЦ «Солнечный ветер»
Teledoc
Tchernov Cable
Отзывы
Благодарю компанию web-now.pro за помощь в разработке и запуске проекта POLITSECRETS.RU. Перед нами стояла задача – внедрить проект в сжатые сроки и по оптимальной цене. Порадовало то, что мне подроб...
Вера БлашенковаСекреты успешных выборов, Москва... апр.2016
Мне очень понравился подход с которым нас встретили "Ваша задача заниматься бизнесом, наша - сделать Вам представительство в сети". После этого ребята разработали полное тз на проект, мы внесли пожела...
МаксимIT-TASK, Москва... янв.2016
Работа проделана хорошо! Дизайнер и менеджер на отлично. Надеюсь на сотрудничество в дальнейшем. Есть шероховатости в деталях по задачам, но приятно сказывается оперативность и желание исправить, внес...
БруноСоциальная сеть След Жизни, Москва... янв.2016
Работой остались очень довольны. К работе подходят ответственно, аккуратно, открыто. Проект был сдан чуть раньше срока, по ходу работы возникали изменения, все они принимались безоговорочно, работа вы...
ЕвгенийМагазин текстиля, Москва... дек.2015
Сотрудничаем с 2007 года и сделали не один проект. Самое главное - команда умеет отстаивать своё мнение и постоянно развивается.
МарияМеждународные конференции, Москва... дек.2015
Спасибо всему коллективу компании! Разработали красивый и что самое главной рабочий интернет магазин! Реклама настроена и запущена, продажи идут, бизнес развивается! Нам постоянно подсказывают о новых...
ВадимИнтернет магазин Aromatic.pro, Москва... сен.2015
Большое спасибо команде за оперативность, качественные работы, отличный креатив и привлекательные цены!
Виктория, ОАО "Фармстандарт... июль.2015
Здравствуйте уважаемые партнеры! С наступающим Новым Годом! Желаю Вам дальнейшего процветания и успехов в Вашей благородной работе! С вами приятно сотрудничать! Очень благодарен Вам за своевременное о...
Сергей ЮрченкоКинотруд, Москва... дек.2014
Благодарим команду Brand Now и лично Дениса Логинова за оригинальное видение,разнообразие идей, четкость взаимодействия и безукоризненное соблюдение сроков выполнения проекта! Планируем продолжить сот...
ТатьянаBizness Linkerz... июль.2014
Компания КУН выражает благодарность за сотрудничество: непростая задача была выполнена в требуемые сроки и полностью удовлетворила заявленному ТЗ. Приятно удивила готовность Генерального директора нач...
Мария, Компания КУНhttp://www.kuhn.com/... апр.2014
Все отзывы
Добавить отзыв