2009 04 июня

Различные условия в шаблонах Joomla 1.5

logo Основные моменты по созданию наиболее часто употребляемых условий в шаблонах для Joomla 1.5. Для простоты примеров будем работать с стандартным com_content
Для начала рассмотрим получение необходимых параметров, которые в Joomla 1.0 было достаточно объявить как глобальные
1
23
$Itemid = JRequest::getInt( 'Itemid', 1, 'get' ); //получем текущий ItemID, если не определен – то по умолчанию будет 1
$option = JRequest::getVar('option', null); // получаем название текущего компонента, в нашем случае будет com_content либо NULL$view = JRequest::getVar('view', null); // получаем значение текущей вьюшки

Примечания:

- Что такое $Itemid можно прочитать в статье http://joomlaforum.ru/index.php/topic,12816.0.html, по умолчанию значение для главной страницы равно 1, смотреть в модуле mainmenu первую ссылку, либо ссылку, опубликованную в состоянии «по умолчанию»

Какие могут быть значения для $view (Еще может добавляться параметр layout):

Section – если тип ссылки «содержимое раздела» category – если тип ссылки «содержимое категории» либо переходим из раздела «содержимое раздела», либо тип «блог-содержимое категории» article – режим просмотра полного текста материала Как узнать необходимый параметр – отлючить стандартный (или сторонний) SEF и смотреть на URL (до полного просветления). Теперь дальше рассмотрим различные ситуации, что могут понадобиться. Для начала HTML код по умолчанию (обычный трехколоночный макет без шапки и подвала, в центре место для pathway и вывода компонентов, слева\справа по позиции модулей)
1
23
<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><div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div>

1 – если на позиции RIGHT не опубликовано ни одного модуля, то не показываем определенный блок сайта

1
23
45
67
<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; ?>
Сакральный смысл – если на позиции нет ни одного модуля, мы не покажем вообще rightcolumn, но чтобы центральная колонка раздвинулась на всю оставшуюся ширину, мы к ней применяем отдельный класс centercolumn_full

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

1
23
45
67
<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), который будет выводить баннеры (или другую информацию) под текстом статьи, но показывать его только в режиме просмотра полного текста статьи

1
23
45
67
8
<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 – хотим показывать правую колонку (целиком) только для авторизованного пользователя (там будут какие-нибудь модули), а гости будут видеть только левый блок и основной контент

1
23
45
67
<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 – хотим авторизованному пользователю показать приветствие с его именем в правой колонке

1
23
45
6
<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 – хотим в произвольном месте шаблона (ну к примеру в левой колонке над модулями) вывести заголовок текущей страницы

1
23
45
67
<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>

Дополнительно:

Все необходимые параметры желательно объявить где-нибудь в index.php заранее и дальше только пользоваться. К примеру сразу после вставить
1
23
45
$Itemid = JRequest::getInt( 'Itemid', 1, 'get' );
$option = JRequest::getVar('option', null); $view = JRequest::getVar('view', null); 
$document       = & JFactory::getDocument();$user = & JFactory::getUser();

Дополнительные ссылки:

Accessing the current user object [howto] Создание шаблона для Joomla! 1.5 Шаблонизация для компонентов и модулей, на примере модуля patway и другие ссылки в Joomla FAQ, относящиеся к разделу Шаблоны - установка, создание, проблемные вопросы (много из Joomla 1.0, но много и схожих приемов\примеров) P.S. естественно, что это не открывает Америки и список примеров далеко не полный, но для базовой основы в качестве ответов на 90% вопросов и пищи для размышлений годится

Комментарии

0 Aleks_El_Dia пишет нам 09.06.2009 23:58
Отличная статья. Пеши ишшо)))
Цитировать Сообщить модератору
0 smat пишет нам 02.07.2009 15:18
3-й листинг сверху (...если на позиции RIGHT не опубликовано ни одного модуля... и так далее...) содержит ошибку. Мы ведь проверяем наличие модулей именно в позиции right Поэтому строка 2 должна выглядеть так: countModules(’right’)) : ?>
Цитировать Сообщить модератору
0 Beliyadm отвечает 02.07.2009 17:06
конечно :) спасибо исправил
Цитировать Сообщить модератору
0 Евгений пишет нам 13.07.2009 18:12
скажите, как убрать ссылку Joomla man внизу шаблона www.e-fedotov.ru плиииииииииз!!!! Сочтемся;)
Цитировать Сообщить модератору
0 More пишет нам 09.10.2009 18:21
Спасибо, помогло!
Цитировать Сообщить модератору
0 Алекмей пишет нам 01.02.2010 19:20
Статья бомба, но вот один очень важный вопрос остался для меня не решенный, как узнать в какой позиции сайта находится к примеру модуль меню, просто я их делаю взаимозаменяемыми и мне нужно знать когда модуль находится в позиции Top, а когда в позиции Left. Заранее Спасибо
Цитировать Сообщить модератору
0 Beliyadm отвечает 01.02.2010 19:22
Не совсем понятен вопрос.. Позиции модулей в шаблоне можно посмотреть через index.php?tp=1. Когда кто из них в каких позициях - знаете только вы, по назначению в админке
Цитировать Сообщить модератору
0 Алекмей отвечает 01.02.2010 19:34
Да, согласен можно там посмотреть, но просто у меня на сайте есть Topmenu(в хэдэре) и MainMenu(в левой колонке), а для изменения их дизайна, мне нужно по любому править html/mod_mainmenu/default.php. к сожаленю изменение префикса класса не поможет. Так вот Я хотел в етом файле прописать условие, что если данное меню находится в левой колнке, то обрамить его таким то дизайном, а если в хэдэре, то таким то. + там еще тексты будут меняться, ну некторый заголовки. В общем фишка в том чтобы программно узнать в какой позиции находится тукущий модуль.
Цитировать Сообщить модератору
0 Beliyadm отвечает 01.02.2010 19:47
К сожалению не знаю чем помочь в данной ситуации. Как вариант можно сделать копию модуля mainmenu (изменив соответственно нужные классы\функции). Но все-таки - точно есть необходимость менять шаблон вывода? В 99% случаев достаточно CSS и префиксов
Цитировать Сообщить модератору
0 Алекмей пишет нам 01.02.2010 19:55
к сожалению не получится через цсс, там просто уникальный дизайн такой), но буду искать. если что сразу дам знать
Цитировать Сообщить модератору
0 Жека пишет нам 29.06.2015 07:54
Доброго времени суток, есть фотогалерея PhocaGallery на Joomla 2.5. Есть ссылки на категории галерей пример: http://site/index.php?option=com_phocagallery&view=category&id=9:dacha-v-melnichnoj-padi&Itemid=261 Хотел сделать чтобы по ссылке (проголосовать): http://site/index.php?option=com_phocagallery&view=category&id=9:dacha-v-melnichnoj-padi&tab=0&Itemid=261 публиковался модуль с всплывающей формой В ссылке после голосования за категорию добавляется после указания категории "&tab=0" Не знаю как это добавить\прописать в условиях шаблона чтобы публиковался модуль только если у ссылки был этот идентификатор "&tab=0" Подскажите как правильно это сделать для данного компонента?
Цитировать Сообщить модератору
0 Beliyadm отвечает 29.06.2015 11:10
Добрый день. Ну по всей видимости аналогично, получить значение нужных переменных и проверить
$option = JRequest::getVar('option', null);
$tab = JRequest::getInt('tab', null);
if ($option == 'com_phocagallery' && $tab == '0') {
// показываем модуль
}
Цитировать Сообщить модератору
0 Жека пишет нам 29.06.2015 13:04
спасибо за совет! решил так: 'com_phocagallery', 'view'=>'category', 'tab'=>'0'))):?>
Цитировать Сообщить модератору
0 Жека пишет нам 29.06.2015 13:04
блин, код обрезало(
Цитировать Сообщить модератору
0 Beliyadm отвечает 29.06.2015 13:19
да ничего страшного, принцип то понятен )
Цитировать Сообщить модератору

Оставить коммент

Защитный код
Обновить