Условия в шаблонах Joomla

 Условия в шаблонах JoomlaКаждый кто работает с CMS Joomla знает как часто бывает нужно изменить или запретить вывод основного контента на главной странице, задать условия для вывода модулей и т.д.

Чтобы было понятно и нагляндно, будем рассматривать стандартный com_content.

Для начала возьмем пример получения таких параметров как:

 $Itemid = JRequest::getInt( 'Itemid', 1, 'get' );

- Получем текущий ItemID, по умолчанию и если не определен "1"

$option = JRequest::getVar('option', null);

- Получаем название текущего компонента, в нашем случае это com_content или NULL

$view = JRequest::getVar('view', null);

- Получаем значение текущеей view

Значение, которые может принимать $view (так же может быть добавлен параметр layout):

  • section – в том случае, если тип ссылки будет «содержимое раздела»
  • category – для типа ссылки «содержимое категории» или же при переходе из раздела «содержимое раздела», либо же тип «блог-содержимое категории»
  • article – полный текст маткриала

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

Код:

$Itemid = JRequest::getInt( 'Itemid', 1, 'get' );
 $option = JRequest::getVar('option', null);
 $view = JRequest::getVar('view', null);
 $document
 = & JFactory::getDocument();
 $user = & JFactory::getUser();

1. Если В позиции RIGHT ничего не опубликовано, то скрывать нужный нам модуль на сайте.

Код:

<div class="leftcolumn"><jdoc:include type="modules" name="left" style="xhtml" /></div>
 <?php if($this->countModules('right')) : ?>
 <div class="centercolumn"><jdoc:include type="modules" name="breadcrumb" /><jdoc:include type="component" /></div>
 <div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div>
 <?php else: ?>
 <div class="centercolumn_full"><jdoc:include type="modules" name="breadcrumb" /><jdoc:include type="component" /></div>
 <?php endif; ?>
P.S. – если в позиции RIGHT нет ни одного модуля, rightcolumn будет скрыт, но для того, чтобы центральный блок занял всю оставшуюся ширину, к нему необходимо применить собственный класс centercolumn_full.

2. Скрываем pathway (путь на сайт) на главной, но показываем на внутренних.

Код:

<div class="leftcolumn">
 <jdoc:include type="modules" name="left" style="xhtml" />
 </div>
 <div class=”centercolumn”>
 <?php if ($Itemid != '1') { ?>
 <jdoc:include type="modules" name="breadcrumb" />
 <?php } else { } ?>
 <jdoc:include type="component" /></div>
 <div class="rightcolumn">
 <jdoc:include type="modules" name="right" style="xhtml" />
 </div>

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

Код:

<div class="leftcolumn"><jdoc:include type="modules" name="left" style="xhtml" /></div>
<div class="centercolumn">
<jdoc:include type="modules" name="breadcrumb" />
<jdoc:include type="component" /></div>
<?php if (($option == 'com_content') && ($view == 'article')) { ?>
<jdoc:include type="modules" name="user1" style="xhtml" />
<?php } else {} ?>
<div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div>

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

Код:

<div class="leftcolumn"><jdoc:include type="modules" name="left" style="xhtml" /></div>
<div class="centercolumn"><jdoc:include type="modules" name="breadcrumb" /><jdoc:include type="component" /></div>
<?php
$user = & JFactory::getUser();
if ($user->get('guest') == '1') { } else { ?>
<div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div>
<?php } ?>

5. Пользователям, которые авторизированы показываем приветствие с его именем в правой колонке.

Код:

<div class="leftcolumn"><jdoc:include type="modules" name="left" style="xhtml" /></div>
<div class="centercolumn"><jdoc:include type="modules" name="breadcrumb" /><jdoc:include type="component" /></div>
<?php
$user = & JFactory::getUser();
echo ‘Привет тебе, о великий '.$user->username'; ?>
<div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div>

6. Выводим заголовок текущей страници в любом месте шаблона.

Код:

<div class="leftcolumn">
<?php
$document = & JFactory::getDocument();
echo $document->title; ?>
<jdoc:include type="modules" name="left" style="xhtml" /></div>
<div class="centercolumn"><jdoc:include type="modules" name="breadcrumb" /><jdoc:include type="component" /></div>
<div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div>

7. Проверка на главную страницу.

Код:

$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault()) {
// на главной
} else {
// тут всё что не на главной
}

//не показывать на главной
<?php if ($menu->getActive() !== $menu->getDefault()) : ?>
//контент или модуль
<?php endif; ?>

Логаут ссылкой виден только зареганым юзерам (joomla 2,5 найдено тут)

<?php
$user = & JFactory::getUser();
if ($user->get('guest') == '1') { } else {
$sess = JUtility::getToken();
echo 'You are logged in as <b>'.$user->username.'</b> (<a href="/index.php?option=com_users&task=user.logout&'.$sess.'=1">Logout</a>)';
} ?>

P.S.: Все необходимые параметры лучше всего объявить в начале в index.php. Например, сразу после <body>вставить

$Itemid = JRequest::getInt( 'Itemid', 1, 'get' );
$option = JRequest::getVar('option', null);
$view = JRequest::getVar('view', null);
$document = & JFactory::getDocument();
$user = & JFactory::getUser();

Источник: http://poltor.com/blog/usloviya-v-shablonayah-joomla.html