|
beliyadm
|
 |
« : 04.06.2009, 19:58:27 » |
|
Основные моменты по созданию наиболее часто употребляемых условий в шаблонах для Joomla 1.5. Для простоты примеров будем работать с стандартным com_content Для начала рассмотрим получение необходимых параметров, которые в Joomla 1.0 было достаточно объявить как глобальные $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 и вывода компонентов, слева\справа по позиции модулей) <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 не опубликовано ни одного модуля, то не показываем определенный блок сайта<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 (хлебные крошки) на главной странице, а только на внутренних<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 { // тут всё что не на главной } Дополнительно:Все необходимые параметры желательно объявить где-нибудь в 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(); Дополнительные ссылки:Accessing the current user object[howto] Создание шаблона для Joomla! 1.5 Шаблонизация для компонентов и модулей, на примере модуля patwayи другие ссылки в Joomla FAQ, относящиеся к разделу Шаблоны - установка, создание, проблемные вопросы (много из Joomla 1.0, но много и схожих приемов\примеров) P.S. естественно, что это не открывает Америки и список примеров далеко не полный, но для базовой основы в качестве ответов на 90% вопросов и пищи для размышлений годится
|
|
|
|
« Последнее редактирование: 09.02.2010, 13:29:07 от beliyadm »
|
Записан
|
|
|
|
| |
bozhkov
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 29
|
 |
« Ответ #121 : 21.05.2010, 16:19:41 » |
|
Вах, спасибо, дарагой!  Все работает!
|
|
|
|
|
Записан
|
|
|
|
|
Mitrich
|
 |
« Ответ #122 : 25.05.2010, 14:36:02 » |
|
Товарищи Nibiru и effrit Взаимное кидание минусами не красит ни одного из вас.
Минусы в результирующей репутации убираю. Nibiru - тебе бан с доступом только на чтение на неделю.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5489
effrit.com
|
 |
« Ответ #123 : 25.05.2010, 14:48:55 » |
|
согласен, но просто так получать минусы я категорически не люблю 
|
|
|
|
|
Записан
|
|
|
|
|
Mitrich
|
 |
« Ответ #124 : 25.05.2010, 14:49:22 » |
|
Закрыли вопрос
|
|
|
|
|
Записан
|
|
|
|
gDenisk
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 79
|
 |
« Ответ #125 : 31.05.2010, 02:09:43 » |
|
<?php $menu = & JSite::getMenu(); if ($menu->getActive() == $menu->getDefault()) { ?> <?php if($this->countModules('user6')) : ?> <div id="vmMainPage"> <jdoc:include type="modules" name="user6" / ><jdoc:include type="component" /> <?php endif; ?> <?php } else { ?> <div id="vmMainPage"> <jdoc:include type="component" /> <?php } ?>
вот такой код и тем не менее отображается на главной странице и на странице категорий магазина VirtueMart.
|
|
|
|
|
Записан
|
|
|
|
gDenisk
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 79
|
 |
« Ответ #126 : 31.05.2010, 02:58:51 » |
|
Я имею в виду условие проверки - главная или нет. Еще вот такое условие проверки есть, но и оно не работает! Ахтунг, что делать? $menu = & JSite::getMenu(); if ($menu->getActive() == $menu->getDefault()) { echo 'This is the front page'; }
|
|
|
|
|
Записан
|
|
|
|
gDenisk
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 79
|
 |
« Ответ #127 : 31.05.2010, 02:59:29 » |
|
т.е. это он и есть, но не отображается! не работает код.
|
|
|
|
|
Записан
|
|
|
|
stratosfera
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 10
|
 |
« Ответ #128 : 03.06.2010, 14:41:32 » |
|
Помогите советом! У меня установлен шаблон, где в шапке шаблона есть одна статичная картинка, которая отображается на всех страницах сайта. А мне нужно сделать так, что бы в определенных пунктах меню сайта, в шапке шаблона отображались разные картинки, например 5 разных изображений, которые будут привязаны к пяти определенным пунктам меню. В стандартных настройках публикаций модулей в Joomla есть еще похожая функция назначения на определенные пункты меню. Только мне это нужно реализовать на уровне шаблона, а я не знаю как.
|
|
|
|
« Последнее редактирование: 03.06.2010, 14:52:25 от stratosfera »
|
Записан
|
|
|
|
b2z
Support Team
   
Репутация: +325/-0
Offline
Пол: 
Сообщений: 4335
Contra Gaming Community
|
 |
« Ответ #129 : 03.06.2010, 15:20:34 » |
|
Привязываемся к Itemid. Называем картинки к примеру picture-номерItemid и в зависимости от Itemid будет подключаться картинка: $Itemid = JRequest::getInt( 'Itemid', 1, 'get' ); <div id="header" style="background: url('../images/picture-<?php echo $Itemid ;?>.jpg')"> </div> Не забудьте только одну из картинок в данном случае назвать как picture-1 и она будет по умолчанию подключаться в случае отсутствия Itemid. Надеюсь идея понятна.
|
|
|
|
|
Записан
|
|
|
|
stratosfera
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 10
|
 |
« Ответ #130 : 03.06.2010, 16:47:14 » |
|
Привязываемся к Itemid. Называем картинки к примеру picture-номерItemid и в зависимости от Itemid будет подключаться картинка: $Itemid = JRequest::getInt( 'Itemid', 1, 'get' ); <div id="header" style="background: url('../images/picture-<?php echo $Itemid ;?>.jpg')"> </div> Не забудьте только одну из картинок в данном случае назвать как picture-1 и она будет по умолчанию подключаться в случае отсутствия Itemid. Надеюсь идея понятна. Идея понятна, но у меня очень мало опыта в этом. Может на примере поможете? Вот часть кода из файла шаблона index.php в котором упоминается картинка в шапке шаблона. <!--BEGINN TOP SECTION --> <div id="top_section" class="clr"> <div id="logo"> <div align="center"><a href="<?php echo $this->baseurl ?>" class="thetip" title="<?php echo $this->params->get('ToolTipLogo'); ?>"><img src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/images/logo.png" alt="<?php echo $siteName; ?>" border="0" /></a></div> </div> Картинка, которая всегда в шапке шаблона: logo.png и в CSS файле есть такая строчка: } #logo{ float:center; padding-bottom:10px; }
|
|
|
|
« Последнее редактирование: 03.06.2010, 17:24:01 от stratosfera »
|
Записан
|
|
|
|
b2z
Support Team
   
Репутация: +325/-0
Offline
Пол: 
Сообщений: 4335
Contra Gaming Community
|
 |
« Ответ #131 : 03.06.2010, 18:43:53 » |
|
Ну в CSS ничего менять не надо. А index.php: <?php $Itemid = JRequest::getInt( 'Itemid', 1, 'get' ); ?>
<!--BEGINN TOP SECTION --> <div id="top_section" class="clr"> <div id="logo"> <div align="center"><a href="<?php echo $this->baseurl ?>" class="thetip" title="<?php echo $this->params->get('ToolTipLogo'); ?>"><img src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/images/logo-<?php echo $Itemid ;?>.png" alt="<?php echo $siteName; ?>" border="0" /></a></div> </div> Соответственно лого Ваши должны называться как logo-номерItemid.png
|
|
|
|
|
Записан
|
|
|
|
stratosfera
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 10
|
 |
« Ответ #132 : 03.06.2010, 20:11:52 » |
|
Ну в CSS ничего менять не надо. А index.php:
Соответственно лого Ваши должны называться как logo-номерItemid.png
Огромное Вам спасибо! Все работает )
|
|
|
|
|
Записан
|
|
|
|
Alex_kor
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 25
|
 |
« Ответ #133 : 09.06.2010, 01:53:53 » |
|
Дело в том, что у меня проблема: на странице контент идёт в 2 столбца, причём один из них модуль mod_content_listing. Во втором выводятся материалы категорий. Если в первом столбце у меня были статьи категории, то при просмотре материала целиком я сделал, чтобы он выводился на всю ширину области контента. Но во втором столбце (там у меня модуль mod_content_listing) находятся логотипы, скажем 3 столбца в 5 строк. И та же ситуация, только здесь не ссылка "подробнее...", а лого как ссылка на описание компании и это также должно быть на ширину области контента. Здесь как с первым столбцом не прокатит по ходу...
|
|
|
|
|
Записан
|
|
|
|
biohan
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 58
|
 |
« Ответ #134 : 09.06.2010, 15:02:23 » |
|
как будет выглядеть условие - если есть такойто модуль,убрать <jdoc:include type="component" /> ?
|
|
|
|
|
Записан
|
|
|
|
|
MuraDweb
|
 |
« Ответ #135 : 09.06.2010, 15:17:27 » |
|
<?php if(!$this->countModules('kakoito')) { ?> <jdoc:include type="component" /> <?php } ?>
|
|
|
|
|
Записан
|
|
|
|
rvb
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 11
|
 |
« Ответ #136 : 14.06.2010, 19:24:00 » |
|
Вот так: <?php $user = &JFactory::getUser(); if ($user->quest): ?> <jdoc:include type="modules" name="top_menu_non_login" /> <?php else: ?> <jdoc:include type="modules" name="top_menu_login" /> <?php endif; ?> Не могу понять где нужно вставлять этот код. Я так понимаю в index.php шаблона. Но в каком месте ?
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5489
effrit.com
|
 |
« Ответ #137 : 14.06.2010, 19:30:27 » |
|
в месте вызова позиций для модулей. если ты правишь готовый шаблон, то ищи строки с нужной тебе позицией (т.е той, рядом с которой ты хочешь свои воткнуть) <jdoc:include type="modules" name="тут позиция перед/после которой хотим свои добавить" />
ну и рядышком (выше или ниже) ставь свои условия для вывода позиций.
|
|
|
|
|
Записан
|
|
|
|
rvb
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 11
|
 |
« Ответ #138 : 15.06.2010, 07:13:42 » |
|
в месте вызова позиций для модулей. если ты правишь готовый шаблон, то ищи строки с нужной тебе позицией (т.е той, рядом с которой ты хочешь свои воткнуть) <jdoc:include type="modules" name="тут позиция перед/после которой хотим свои добавить" />
ну и рядышком (выше или ниже) ставь свои условия для вывода позиций.
Спасибо за подсказку. Вроде нашел нужную строку где вставлять код: <?php $user = &JFactory::getUser(); if ($user->guest): ?> <jdoc:include type="modules" name="top_menu_non_login" /> <? if (artxCountModules($document, 'left')) : ?> <div class="art-sidebar1"><?php echo artxModules($document, 'left', 'art-block'); ?> </div><?php endif; ?> <?php else: ?> <jdoc:include type="modules" name="top_menu_login" /> <? if (artxCountModules($document, 'left')) : ?> <div class="art-sidebar1"><?php echo artxModules($document, 'left', 'art-block'); ?> </div><?php endif; ?> <?php endif; ?> но видимо , опять что-то упустил, не получилось.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5489
effrit.com
|
 |
« Ответ #139 : 15.06.2010, 07:29:16 » |
|
помимо добавления в шаблон надо прописывать в templateDetail.xml название добавленных позиций
|
|
|
|
|
Записан
|
|
|
|
Alex_kor
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 25
|
 |
« Ответ #140 : 15.06.2010, 21:24:59 » |
|
как программно индентифицировать режим просмотра полного текста НЕКАТЕГОРИЗИРОВАННОГО материала?
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5489
effrit.com
|
 |
« Ответ #141 : 15.06.2010, 22:52:10 » |
|
а какая разница, в категории или нет. <?php if (($option == 'com_content') && ($view == 'article')) { ?>
|
|
|
|
|
Записан
|
|
|
|
Alex_kor
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 25
|
 |
« Ответ #142 : 15.06.2010, 23:24:28 » |
|
мне нужно следующее: если материал выводится как шаблон блога категории со вступительным текстом, то надо его выводить не на всю ширину области контента, т.к. будет отображаться ещё один модуль, а при полном просмотре - статьи выводятся на всю ширину области контента. В то же время есть ситуация, когда при выводе полного материала статьи(некатегоризированной) нужно отображать ещё и другой модуль. Вот я и хочу проверить, что если article есть некатегор., то доп. модуль отображать, а если article - это полный текст категор. материала, то скрывать
|
|
|
|
|
Записан
|
|
|
|
PashkaRu
JComments Tester
Репутация: +90/-4
Offline
Пол: 
Сообщений: 1078
Дедушка Игнат, изыди ((((
|
 |
« Ответ #143 : 16.06.2010, 00:47:59 » |
|
проверку первую оставляешь. всю обвязку модуля лучше сделать в шаблон/html/modules.php
В index.php вставляется первое твое условие, но без _внешней_ обвязки. Т.е. все дивы, обрамляющие модуль, должны быть видны только когда модуль включен.... хотя... если все это в условии находится, то не важно.
Далее в делаешь пункт меню с этой страницей, которая без категории (доп. меню, которое нигде не видно... ну, если не нмдо, чтобы оно было видно) и в настройках модуля в админке указываешь, что модуль надо показывать в этом пункте меню.
В общем идея такая... ну а если там разные модули используются, то... повторяю - идя такая : ) комбинировать условие в index.php с админкой.
Ну или тоже в индекс.пхп сделать показ модуля при опредленном itemid. А эти условия опять же прописаны вверху этого топика : )
|
|
|
|
|
Записан
|
|
|
|
rvb
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 11
|
 |
« Ответ #144 : 16.06.2010, 13:34:16 » |
|
помимо добавления в шаблон надо прописывать в templateDetail.xml название добавленных позиций
а как описать добавленные позиции ?
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5489
effrit.com
|
 |
« Ответ #145 : 16.06.2010, 13:37:32 » |
|
ну это открой файл и включи мозг  если не догадаешься, то закрой файл и сотри Joomla 
|
|
|
|
|
Записан
|
|
|
|
rvb
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 11
|
 |
« Ответ #146 : 17.06.2010, 19:00:15 » |
|
ну это открой файл и включи мозг  если не догадаешься, то закрой файл и сотри Joomla  спасибо за помощь, ты добрый
|
|
|
|
|
Записан
|
|
|
|
PashkaRu
JComments Tester
Репутация: +90/-4
Offline
Пол: 
Сообщений: 1078
Дедушка Игнат, изыди ((((
|
 |
« Ответ #147 : 17.06.2010, 19:39:42 » |
|
: ))) там спасибо за какую строчку? вторая или третья? : )))
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +576/-5
Offline
Пол: 
Сообщений: 5489
effrit.com
|
 |
« Ответ #148 : 17.06.2010, 21:35:48 » |
|
за комплексное решение  rvb, просто надо до задавания вопроса самому пытаться что-то сделать, тем более что там интуитивно понятно, достаточно просто открыть файл (на который было указано) и посмотреть было. +ещё есть поиск по форуму и FAQ в которых всё это есть. ну реально высаживает, что совсем не хотят думать люди. ощущение, что надо писать на каком-то детском алгоритмическом языке программу для человекороботов REM *** суперпрограмма для не желающих думать *** открыть тоталкоммандер выбрать файл templateDetails.xml нажать F4 найти секцию <positions> вписать свою позицию сохранить файл закрыть окно редактора поздравить себя с выполнением задачи без использования мозга отключиться *** конец суперпрограммы *** ну конечно, я излишне желчен. но в чём я не прав? 
|
|
|
|
|
Записан
|
|
|
|
|
Lex
|
 |
« Ответ #149 : 17.06.2010, 21:38:07 » |
|
вписать свою позицию
А как вписать 
|
|
|
|
|
Записан
|
|
|
|
PashkaRu
JComments Tester
Репутация: +90/-4
Offline
Пол: 
Сообщений: 1078
Дедушка Игнат, изыди ((((
|
 |
« Ответ #150 : 17.06.2010, 21:41:32 » |
|
самое интересно, что и в templateDetails.xml прописывать позицию модуля не обязательно : ) главное в самом шаблоне ее указать.
а название сейчас (я че-то даже не заметил, разве так было всегда? или с какой-то версии?) можно прописать прямо в настройках модуля. Там же где позиция указывается, там ее можно просто ВПИСАТЬ : )
|
|
|
|
|
Записан
|
|
|
|
|