Добавить вывод модулей между материалами можно в файле шаблона вывода материалов.
Предварительно копируем файлы раскладок в папку html шаблона, чтобы они не затерлись при обновлении Joomla.
И в файл:
шаблон/html/com_content/featured/default.php
добавляем следующий код.
В начало файла, можно после
defined('_JEXEC') or die;
добавляем массив с настройками и код для получения html кода модулей:
/********************************************************************/ /* для настроек */ $position = 'reklama'; /* шаг количество колонки */ $posParams = array( array(5, 3, 2), array(5, 2, 1), ); /* для настроек */ /* стиль для вывода колонками - скопировать в css файл шаблона */ /* .mod-inner-table{ display:table; width:100%; } .mod-inner-row{ display:table-row; } .mod-inner-cell{ display:table-cell; } */ $iItem = 0; $iPos = 0; $iMod = 0; $modOut = ''; $posOut = ''; $currentStep = 0; /* загружаем модули */ $modules = JModuleHelper::getModules($position); $document = JFactory::getDocument(); $renderer = $document->loadRenderer('module'); $modNums = count($modules); $style = 'xhtml'; $styleParams = array('style' => $style); /********************************************************************/
Настройки задаются в массиве
array(5, 3, 2),
5 - сколько материалов пропустить
3 - сколько выводить модулей
2 - количество колонок
Для каждой позиции модулей можно задать свои настройки, также добавить удалить сами позиции модулей.
Модулям в админке назначаем позицию reklama, название позиции тоже можно изменить в настройках:
$position = 'reklama';
Поскольку код вывода материалов состоит из трех циклов - главные материалы и остальные материалы и ссылки, то добавляем следующий код в конец двух циклов по материалам.
Копируем код который ниже перед:
<?php endforeach; ?>
вот этот код
<?php /********************************************************************/ /* вывод модулей */ if($iItem == ($currentStep+$posParams[$iPos][0]-1)){ $posOut = ''; $iRow = 1; $iCol = 1; $startRow = 0; for ($startMod = $iMod; $iMod < $modNums && $iMod < $posParams[$iPos][1]+$startMod; $iMod++){ if ($iCol == 1) { $posOut .= '<div class="mod-inner-table pos-' . $iPos . '"><div class="mod-inner-row row-' . $iRow . '">'; $startRow = 1; $iRow++; } ob_start(); echo $renderer->render($modules[$iMod], $styleParams); $modOut = ob_get_clean(); $posOut .= '<div class="mod-inner-cell col-' . $iCol . '">'; $posOut .= $modOut; $posOut .= '</div>'; if ($startRow && $iCol == $posParams[$iPos][2]) { $posOut .= '</div></div>'; $startRow = 0; $iCol = 1; }else{ $iCol++; } } if ($startRow) $posOut .= '</div></div>'; echo $posOut; $iPos++; $currentStep += $posParams[$iPos][0]; } $iItem++; /********************************************************************/ ?>
Таким образом модули можно добавлять не только в раскладку блога:
category/blog.php
но и в вывод списком:
category/default.php
и в вывод материалов на главной:
featured/default.php
Вывод модулей среди материалов на главной мы здесь и рассмотрели.