Хитрости в шаблонах Joomla 1.5. Часть 2: Про оформление модулей
Привет! Сегодня поговорим о внутреннем оформлении модулей, имея ввиду HTML-код, который генерируют позиции модулей (пространство имён jdoc). По умолчанию Joomla 1.5 имеет 6 способов генерации кода. Способ генерации указывается в атрибуте «style», например:
<jdoc:include type="modules" name="top" style="none" />
Рассмотрим все 6 способов более подробно:
1) style=«rounded» — выводит модуль в четырёх вложенных div'ах, для создания закруглённых углов (на самом деле сейчас эта технология устарела, есть менее ресурсоёмкие способы):
<div class="module_menu">
<div>
<div>
<div>
<h3>Main Menu</h3>
<ul class="menu">
<li><!-- various menu items --></li>
</ul>
</div>
</div>
</div>
</div>
2) style=«table» — выводить модуль в таблице:
<table cellpadding="0" cellspacing="0" class="moduletable_menu">
<tr>
<th valign="top">Main Menu</th>
</tr>
<tr>
<td>
<ul class="menu">
<li><!-- various menu items --></li>
</ul>
</td>
</tr>
</table>
3) style=«horz» — выводить модуль горизонтально в ячейке окружающей таблицы:
<table cellspacing="1" cellpadding="0" border="0" width="100%">
<tr>
<td valign="top">
<table cellpadding="0" cellspacing="0" class="moduletable_menu">
<tr>
<th valign="top">Main Menu</th>
</tr>
<tr>
<td>
<ul class="menu">
<li><!-- various menu items --></li>
</ul>
</td>
</tr>
</table>
</td>
</tr>
</table>
4) style=«xhtml» — выводить модуль в одном div-элементе:
<div class="moduletable_menu">
<h3>Main Menu</h3>
<ul class="menu">
<li><!-- various menu items --></li>
</ul>
</div>
5) style=«none» — выводить модуль без форматирования:
<ul class="menu">
<li><!-- various menu items --></li>
</ul>
6) style=«outline» — выводить модуль с названием позиции модуля (словно также, когда к адресу сайта добавляется параметр «tp=1» для просмотра имеющихся позиций модулей в шаблоне:
<div class="mod-preview">
<div class="mod-preview-info">left[outline]</div>
<div class="mod-preview-wrapper">
<ul class="menu">
<li><!-- various menu items --></li>
</ul>
</div>
</div>
Хоть и имеется 6 способов, но реально из них используются только два: «xhtml» и «none». Бывают ситуации когда этого не достаточно для реализации какой-то изюменки. Что же делать? Конечно читать документацию и благодарить разработчиков Joomla, которые позаботились даже об этом и разработали возможность создавать свои типы модулей (пользовательские модули). Чтобы определить пользовательский модуль вы должны в каталоге с вашим шаблон создать каталог «html» и положить туда файл «modules.php». В этом файле вы должны определить функцию, называемую «modChrome_STYLE», где «STYLE» — это имя вашего пользовательского модуля. Эта функция будет принимать три аргумента: $module, &$params и &$attribs:
<?php
defined('_JEXEC') or die('Restricted access');
function modChrome_STYLE( $module, &$params, &$attribs )
{
/* chromed Module output goes here */
}
?>
В рамках этой функции может быть использовано любое модульное свойство (в т.ч. и параметры, которые содержатся в таблице «jos_modules» вашей БД). Основными же. являются:
— $module->content — переменная выводит содержимое модуля;
— $module->showtitle — переменная возвращает значение 1, если в настройках модуля разрешено показывать заголовок модуля, иначе — 0;
— $module->title — переменная выводит заголовок модуля.
Рассмотрим небольшой пример, в котором показан способ проверки отображения заголовка модуля, а также вывод самого заголовка в случае положительного результата:
<?php
if ($module->showtitle)
{
echo '<h2>' .$module->title .'</h2>';
}
?>
Параметры модуля можно использовать через объект $params. Например вывод суффикса класса модуля (по умолчанию это значение хранится в параметре «moduleclass_sfx») осуществляется таким способом:
<div class="moduletable</span><span class="pun"><?php echo $params->get( 'moduleclass_sfx' ); ?>">
<!-- div contents -->
</div>
Попрактикуемся! Создадим пользовательский модуль, назовём его «custom» (это значит, что при использования его в шаблоне нужно будет написать style=«custom» в <jdoc:include />). Ну а толку да от такого модуля? Нужно сделать что-то интересное, чтобы почувствовать действительную необходимость пользовательских модулей! Сделаем первое слово в заголовке модуля красным цветом, а все остальные слова — цветом по умолчанию, описанному в стилях:
<?php
defined('_JEXEC') or die('Restricted access');
function modChrome_custom($module, &$params, &$attribs)
{ ?>
<div class="moduletable</span><span class="pun"><?php echo $params->get('moduleclass_sfx'); ?>">
<?php if ($module->showtitle) : ?>
<h3>
<?php
$title = $module->title;
$title = split(' ', $title);
$title[0] = '<span style="color:red">'</span><span class="pun">.$title[0].'</span>';
$title = implode(' ', $title);
echo $title;
?>
</h3>
<?php endif; ?>
<div>
<?php echo $module->content; ?>
</div>
</div>
<?php }
?>
Вот так просто, всё зависит только от вашей фантазии и уровня знаний PHP! Для тех кто внимательно читал всё выше описанное, сейчас наступило самое время сделать себе сладкий чай, тем самым подкрепить мозг и дать устоятся полученным знаниям.
Как я уже писал выше, пользовательская функция принимает три аргумента. Для чего нужны два я кое-как объяснил, остался последний — &$attribs, о нём и поговорим. Как уже стало понятно разработчики не остановились на достигнутой гибкости и решили дать возможность использовать дополнительные параметры, которые хранятся в массиве $attribs. Рассмотрим пример:
<?php
defined('_JEXEC') or die('Restricted access');
function modChrome_custom( $module, &$params, &$attribs ) {
if (isset( $attribs['headerLevel'] ))
{
$headerLevel = $attribs['headerLevel'];
} else {
$headerLevel = 3;
}
if (isset( $attribs['background'] ))
{
$background = $attribs['background'];
} else {
$background = 'blue';
}
?>
<div class="moduletable</span><span class="pun"><?php echo $params->get( 'moduleclass_sfx' ); ?>">
<?php
if ($module->showtitle)
{
echo '<h' .$headerLevel .'>' .$module->title .'</h' .$headerLevel .'>';
}
?>
<div class="</span><span class="pun"><?php echo $background; ?>">
<?php echo $module->content; ?>
</div>
</div>
<?php
}
?>
Затем вы должны установить значения в <jdoc:include />, если вы этого не сделает, то будут использоваться значения по умолчанию: цвет синий, размер заголовка третий. Значения задаются таким образом:
1) <jdoc:include type=«modules» name=«user1» style=«custom» background=«green» /> — задаём значение цвета: background=«green»;
2) <jdoc:include type=«modules» name=«user1» style=«custom» headerLevel=«1» background=«yellow» /> — задаём значение размера заголовка и цвета: headerLevel=«1» и background=«yellow».
На этом всё! Продолжение следует…
http://joomlacity.net/blog/tem_creator/12.html
Хитрости в шаблонах Joomla 1.5. Часть 2: Про оформление модулей - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.