Хитрости в шаблонах 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. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.

Блог

Календарь приёма объявлений

Небольшой пример из повседневной практики. Организация меняет реквизиты, и они вступят в силу через  пару недель. На сайте идет приём объявлений и объявления принимаются на несколько месяцев в...

Дырка в com_content

Сегодня у товарища, сайт которого находится на старой  Joomla 1.0.3, была сильная нагрузка на сервере, просматривая логи обнаружил не вежливый запрос такого порядка: http://сайт/index2...

Лечим вирус на сайте

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

Troj/JSRedir-MH

Снова грянул гром зарежения сайтов новым вирусом  Troj/JSRedir-MH.  И так в коротко по вирусу Troj/JSRedir-MH. Вирус или троян куда интереснее чем свои предшествиники, тепер...

Доработка расширения для рассылки Send Email JK

Сегодня поделюсь немного интересной информацией для владельцев сайтов собранных ан joomla.  Рано и поздно возникает задача подписки и рассылки информации с сайта, это может быть разная постановка зада...

Привет Ie 10 регулярка

И вот и мне пришлось столкнулся с проблемами перехода на win 8 в придачу с ie 10, некоторых постоянных пользователей моих сайтов. На многих сайтах  имеющих раздел по приёму объявлений, использ...

Kunena заменяем ссылку на профиль пользователя

Всем привет, снова снова кунена, получил задание на допиливание популярного форума Kunena, сегодня потребовалось поменять ссылку на профиль пользователя. Это связано с тем, что на сайте стоит социа...

Работает на Kunena - зачем на каждой странице?

  Все у кого стоит форум kunena мешает надпись с двумя ссылкам внизу форума "Работает на Kunena". Сея надпись висит на каждой странице форма, а также страница разработчиков содержит множество вн...

Kunena избавимся от лишних quote

Для тех кто действительно делает сайт для людей, моя следующая заметка. Расскажу вам, как избавиться от лишних quote в постах на форуме kunena. У меня несколько тематических сайтов с нормальной посеща...

Kunena решаем проблему с пропажей аватаров

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

Джомлавикам

Обработка параметров расширений joomla

При разработке расширений для CMS Joomla, таких как плагины, модули, компоненты или шаблоны, часто возникает необходимость получить параметры разрабатываемого или любого другого расширения. В этой ...

Кunena крамсаем шаблон

1. В папке \components\com_kunena\template\ваш_шаблон\ находим файл template.xml и вставляем в него такой кусок (чтобы была возможность выбора показывать это поле или нет): <param name="l...

Подключить свои классы и методы в Joomla?

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

3 новых полезных класса в Joomla 2.5

В платформе Joomla 11.3 разработчики добавлил несколько полезных новых классов для разработчиков. Рассмотрю некоторый из них - JGrid (для построения HTML таблиц), JWebClient (для получения информац...

Репозиторий файлов на Joomla средствами Apache

Создадим две вложенные директории /files/files в корне сайта. Если вы пожелаете использовать другие имена директорий, то вам необходимо будет внести соответствующие правки в дальнейшем. ...