Небольшие хитрости с позициями модулей

  • 11.04.2006

В последнее время довольно часто на форуме задают весьма похожие вопросы, посвященные публикации модулей: «как показать модуль только незарегистрированным пользователям», «как ограничить видимость модуля для конкретных IP-адресов» и т.д. В этой небольшой статье, я хочу показать способ решения этих задач с помощью шаблонов Joomla.

Основная идея предлагаемых решений, это объявление в шаблоне Joomla разных позиций модулей в зависимости от условий. Т.е. если некоторое условие выполняется, то мы отображаем в шаблоне одну позицию, а если нет, то другую. Примерно вот так:

<?php
 if (условие) {
  mosLoadModules ( 'user1' ); 
 } else {
  mosLoadModules ( 'user2' ); 
 }
?>
Давайте рассмотрим несколько простых примеров.




Отображение модуля только на главной странице

Если вам необходимо отобразить некоторый модуль на сайте только на главной странице сайта, и не показывать на остальных (в том числе и дочерних) страницах, можно воспользоваться решением с использованием шаблонов Joomla. Вставляем в шаблон позицию модуля с проверкой текущего компонента:

<?php
	if (($option == '') || ($option == 'com_frontpage')) {
		mosLoadModules ( 'user1' );
	}
?>

Данная проверка отобразит позицию модулей user1 только в том случае, если в данный момент открыта главная страница сайта.



Ограничение отображения модуля по IP

Если вам необходимо отобразить некоторый модуль на сайте только для определенного IP-адреса или диапазона IP-адресов, можно воспользоваться решением с использованием шаблонов Joomla. Вставляем в шаблон позицию модуля с проверкой IP-адреса:

<?php
	if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') {
		mosLoadModules ( 'user1' );
	}
?>

Данная проверка отобразит позицию модулей user1 только в том случае, если IP-адрес клиента равен 127.0.0.1. Для остальных посетителей данная позиция будет скрыта, а следовательно и модули, опубликованные в ней, будут невидимы.


Ограничение отображения модуля по типу пользователя

Допустим вам необходимо отображать 2 разных модуля: один для зарегистрированных пользователей, а другой — для незарегистрированных. Как известно, при публикации модуля, в качестве прав доступа можно выбрать Public, Registered и Special. Если мы опубликуем модуль с правами доступа Public, он будет отображаться и для зарегистрированных, и для незарегистрированных. Как же быть? И снова нам помощь приходят шаблоны. Добавляем в шаблон проверку типа пользователя:

<?php
 if (!$my->id) {
  mosLoadModules ( 'user1' ); 
 } else {
  mosLoadModules ( 'user2' ); 
 }
?>

Если на сайт заходит не зарегистрированный или неавторизованный пользователь, то в шаблоне загрузятся модули, опубликованные в области user1, а если зарегистрированный — загрузится позиция user2.

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

<?php
 if ($my->usertype == 'Author') {
  mosLoadModules ( 'user1' ); 
 }
?>

В приведенном выше примере, модули, опубликованные в позиции user1, будут видны только для пользователей группы Author.



Отображение модуля только в режиме просмотра полного текста материала

Если вам необходимо отобразить некоторый модуль на сайте только на странице просмотра полного текста материала, то необходимо вставить проверку значения переменной $task:

<?php
	if (($option == 'com_content') && ($task == 'view')) {
		mosLoadModules ( 'user1' );
	}
?>

Данная проверка отобразит позицию модулей user1 только в том случае, если в данный момент открыт просмотр полного текста материала.

Это интересно:

Joomla!® CMS — пожалуй, лучшая система управления контентом с открытым исходным кодом

Joomla! — это больше, чем просто программное обеспечение, это люди, включающие разработчиков, дизайнеров, системных администраторов, переводчиков, копирайтеров, и, что самое главное — простых пользователей.

Мы рады пригласить вас в ряды нашего сообщества!

Скачать Joomla! 3 Документация Joomla! CMS Свернуть

Шаблоны Joomla

Новости портала

Новое в блогах

Видео