Шаблонизация модулей

24/08/2009 Документация Joomla 1.5

В этой статье я немного расскажу о шаблонизации модулей в Joomla 1.5. Допустим нужно выводить модули в определенной позиции в 4-х дивах (<div>) или задать свой вид  вывода модуля. Для этого в Joomla можно задавать свои стили вывода модулей.

Стандартно модули в Joomla выводятся так:

<jdoc:include type="modules" name="user1" style="xhtml" />
  • name - позиция модуля;
  • style - как раз то что нам нужно, стиль вывода модуля;

Параметр style стандартно может принимать не много значений:

  • none;
  • table;
  • horz;
  • xhtml;
  • rounded;
  • outline;

Подробнее о них смотрите файл Joomla(root)\templates\system\html\modules.php.

Можно сделать свой стиль вывода модуля. Для этого создадим файл modules.php следующего содержания

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

function modChrome_mystyle($module, &$params, &$attribs)
{ ?>

<div class="mystyle<?php echo $params->get('moduleclass_sfx'); ?>">
<?php if ($module->showtitle != 0) : ?>
<h3><?php echo $module->title; ?></h3>
<?php endif; ?>
<?php echo $module->content; ?>
</div>

<?php } ?>

И сохраним его в Joomla(root)\templates\ВАШ ШАБЛОН\html\modules.php. Обратите внимание, функция должна назваться - function modChrome_название стиля. Теперь, когда есть этот файл в шаблоне, он автоматически будет подключаться и выводить нужные стили. В index.php шаблона теперь можно выводить модули так:

<jdoc:include type="modules" name="user1" style="mystyle" />

Основные значения для $module:

  • $module->id - ID модуля;
  • $module->title - заголовок модуля;
  • $module->content - контент модуля (содержимое);
  • $module->position - позиция модуля;
  • $module->showtitle - 0 или 1 показывать заголовок;
  • $module->name - название модуля;

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

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

function modChrome_mystyle($module, &$params, &$attribs)
{
$suffix = $params->get('moduleclass_sfx', '');
switch ($suffix) {
case 'red': ?>

<div class="red">
<?php if ($module->showtitle != 0) : ?>
<h3><?php echo $module->title; ?></h3>
<?php endif; ?>
<?php echo $module->content; ?> </div>
<?php break;
case 'blue': ?>
<div class="blue">
<?php if ($module->showtitle != 0) : ?>
<h3><?php echo $module->title; ?></h3>
<?php endif; ?>
<?php echo $module->content; ?> </div>
<?php break;
default: ?>
<div class="default">
<?php if ($module->showtitle != 0) : ?>
<h3><?php echo $module->title; ?></h3>
<?php endif; ?>
<?php echo $module->content; ?> </div>
<?php }

}?>

Как видно из этого примера, можно задавать вид вывода модуля в зависимости от суффикса класса модуля. Если суффикс класса будет red или blue и стиль вывода модуля будет mystyle, то соответственно можно настроить отдельно вывод этих модулей.

Различные эффекты.

Несколько примеров для различного вывода заголовков модулей.

Первое слово (до первого пробела) отдельным стилем:

$title     = preg_replace('/([^\s]+)(.*)/i', '<span class="color">${1}</span>${2}', JText::_($module->title));

Все что после пробела отдельным стилем:

$pos   = JString::strpos($module->title, ' ');
$title = ($pos !== false) ? JString::substr($module->title, 0, $pos).'<span class="color">'.JString::substr($module->title, $pos).'</span>' : $module->title;

16 

Комментарии   

 
-1 Sam
22.02.2011 12:54
полезная статейка! спасибо
 
 
-1 mainet
25.03.2011 15:27
Спасибо огромное!
 
 
+1 Игорь
11.04.2011 10:54
Вылазят кракозябры после того как отредактировал. что это значит?
а если удалить modules.php все норм.
 
 
+1 Arte
11.04.2011 17:09
Цитирую Игорь:
Вылазят кракозябры после того как отредактировал. что это значит?
а если удалить modules.php все норм.

Значит, что ошибки в php. Проверяйте Dreamviewer'oм ;)
 
 
-1 Cpentyc
14.08.2011 21:45
Цитирую Игорь:
Вылазят кракозябры после того как отредактировал. что это значит?
а если удалить modules.php все норм.

кодировка файла не та