Установка модулей - Скрытие «пустых» модулей

В Joomla есть одна существенная недоработка модульной части — отсутствует возможность контролирования отображения модулей через компонент.

К примеру:
Модуль «Меню Страны».
Он должен отображаться только тогда когда мы находимся в разделе Информация о Стране, но никак не на странице «Список Стран». А так как, это все один и тот же Компонент, то через настройки отображения модулей — разграничить не получится. Соответственно т.к. модуль отображен — выводится один заголовок, в нашем случае «Меню Страны» и далее пусто… вобщем, не очень эстетично выглядит…
Давайте решим эту проблему.
Есть один метод который позволяет с легкостью исправить этот глюк без внесения изменений в ядро Joomla — через шаблон.

Для примера допустим название нашего шаблона: «my_template», соответственно путь до папки с шаблоном:
/templates/my_template


Шаг первый — Создание шаблона модуля

переходим в папку с шаблоном и создаем там подпапку html (если ее еще нет)
/templates/my_template/html


в ней создаем фаил modules.php (опять же, если его еще нет) следующего содержания:
<?php
// no direct access
defined('_JEXEC') or die('Restricted access');

function modChrome_hideempty($module, &$params, &$attribs)
{
	$style = isset($attribs['modulestyle']) ? $attribs['modulestyle'] : 'none';
	if (!empty ($module->content)) :
		$functionName = 'modChrome_'.$style;
		echo $functionName($module, $params, $attribs);
	endif;
}
?>


Если фаил уже присутствует, то просто в конец его добавляем функцию modChrome_hideempty.

Шаг второй — Вносим изменения в текущий шаблон

открываем фаил для редактирования
/templates/my_template/index.php


и ищем в нем описания модуля… примерно такая строчка:
<jdoc:include type="modules" name="left" />


ее то нам и надо изменить на:
<jdoc:include type="modules" name="left" <b>style="hideempty"</b> />

добавив параметр style=«hideempty», причем если в строке уже присутствует другой стиль (к примеру, rounded) — его значение мы переносим в соседний параметр modulestyle… получается так:
<jdoc:include type="modules" name="left" <b>style="hideempty"</b> <b>modulestyle="rounded"</b> />


Сохраняем, заходим на страницу и радуемся — пустые модули больше не отображаются.
  • +1
  • 16 сентября 2010, 13:49
  • DOLARiON

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.