В одной из прошлых статей я Вам поведал о том как вставить модуль в материал Joomla 2.5-3.x
В этой статье я расскажу Вам как вставить модель не просто в материал, а вообще в любое место компонентов Joomla 2.5-3.x будь то стандартный компонент материалов Joomla, Joomshopping или Virtuemart... не имеет значение что это будет за компонент.
Каждый найдет свое применение этой информации, я, например, использовал этот метод вставки модуля рекламы Google Adwords в область сразу после заголовка статьи и непосредственно перед выводом комментариев.
Вы можете сказать что Вам это не нужно, и вам вполне хватает возможности вставлять модуль внутрь материала вставками типа {loadposition myposition}. Но, представьте что у Вас, уже имеется несколько десятков или сотен опубликованных ранее материалов и вы только сейчас решили разместить в них рекламу, попробуйте оценить сколько времени вам понадобиться чтобы все их отредактировать.
В общем каждый найдет свои причины использования этого метода вставки модуля, или не найдет и отвергнет его как нечто бесполезное.
Для тех кого интересует возможность вставки модуля в код любого компонента Joomla 2.5-3.x и пишется эта статья.
Ну что ж друзья, давайте наконец-то
вставим Джумле модуль 😀
Вставку модуля в компонент мы будем рассматривать на примере стандартного компонента материалов COM_CONTENT. Но вставкой модуля в материал Joomla мы заниматься не будем. Я придумал задачку чуток поинтереснее. Давайте вставим наш модуль с рекламой в блог после каждого третьего материала.
Для нашего эксперимента я создал обычный текстовый модуль и задал ему, несуществующую в активном шаблоне, позицию position-748
Далее, откроем в текстовом редакторе файл
/components/com_content/views/category/tmpl/blog.php
или если Вы все всегда делаете правильно, тот наверняка вы переопределили шаблоны вывода компонента и нужный файл уже будет по адресу
/templates/ВАШ_ШАБЛОН/html/com_content/category/blog.php
Необходимый нам код шаблона вывода материалов блога выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $leadingcount = 0; ?> <?php if (!empty($this->lead_items)) : ?> <div class="items-leading"> <?php foreach ($this->lead_items as &$item) : ?> <article class="leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? 'system-unpublished' : null; ?>"> <?php $this->item = &$item; echo $this->loadTemplate('item'); ?> </article> //тут мы будем выводить наш рекламный модуль <?php $leadingcount++; ?> <?php endforeach; ?> </div> <?php endif; ?> |
Выводить наш модуль мы будем когда в переменную будут попадать числа кратные трем: 3, 6, 9, 12 и так далее. Чтобы определить эти моменты воспользуемся такой арифметической операцией как деление по модулю.
Для определения момента когда нужно выводить наш модуль, мы будем использовать переменную $leadingcount, которая как раз содержит порядковый номер выводимого материала. Начальное значение этой переменной нужно выставить равным единице, в противном случае первый раз модуль у нас будет выведен после первого материала, а второй раз не после 3-го а после 4-го.
Код условия для вывода модуля будет выглядеть следующим образом:
1 2 3 4 5 |
<?php if($leadingcount%3 == 0){ //тут будет код вывода нашего модуля } ?> |
Теперь давайте перейдем непосредственно к коду, который и будет выводить наш модуль.
Для этих целей мы будем использовать стандартный Joomla PHP класс JModuleHelper и его методы getModules и renderModule.
Так же стоит помнить, что в одной позиции может быть опубликовано несколько модулей. Ниже приведены варианты для случаев когда в позиции опубликован один модуль или несколько.
Код вывода позиции модуля с одним, опубликованным в ней модулем:
1 2 3 4 5 6 |
<?php jimport( 'joomla.application.module.helper' ); // подключаем требуемый класс $module = JModuleHelper::getModules('position-748'); // заполняем массив модулями, опубликованными в позиции position-748 $attribs['style'] = 'none'; // указываем стиль вывода модуля none (так как при использовании стиля xhtml наблюдается дублирование заголовков модуля) echo JModuleHelper::renderModule($module[0], $attribs); // выводим первый модуль из заданной позиции ?> |
Код вывода позиции модуля с несколькими опубликованными в ней модулями:
1 2 3 4 5 6 7 8 9 |
<?php jimport( 'joomla.application.module.helper' ); // $module = JModuleHelper::getModules('position-748'); // заполняем массив модулями, опубликованными в позиции position-748 $attribs['style'] = 'none'; // указываем стиль вывода модуля none (так как при использовании стиля xhtml наблюдается дублирование заголовков модуля) foreach($module as $moduleitem){ // перебираем в цикле и выводим по очереди все модули из позиции position-748 echo JModuleHelper::renderModule($moduleitem, $attribs); } ?> |
Так как у нас в позиции position-748 опубликован всего один модуль, то мы будем использовать первый вариант кода и в итоге после внесения правок код нашего модуля будет выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php $leadingcount = 1; ?> <?php // подключаем требуемый класс за пределами цикла foreach чтобы он заново не подключался при выводе каждого материала блога jimport( 'joomla.application.module.helper' ); // заполняем массив модулями, опубликованными в позиции position-748 $module = JModuleHelper::getModules('position-748'); // при необходимости указываем стиль вывода модуля (module chrome) $attribs['style'] = 'none'; ?> <?php if (!empty($this->lead_items)) : ?> <div class="items-leading"> <?php foreach ($this->lead_items as &$item) : ?> <article class="leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? 'system-unpublished' : null; ?>"> <?php $this->item = &$item; echo $this->loadTemplate('item'); ?> </article> <?php if($leadingcount%3 == 0){ foreach($modules as $moduleitem){ // в цикле перебираем и выводим все модули echo JModuleHelper::renderModule($moduleitem, $attribs); } } ?> <?php $leadingcount++; ?> <?php endforeach; ?> </div> <?php endif; ?> |
В результате внесения, описанных выше правок, получим следующий вид блога материалов:
Статья написана по материалам сайта http://site-on.net/create/cms/20-jmodulehelper
автор: Руслан Овчинников