|
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 »
|
Записан
|
|
|
|
| |
|
stasyansky
|
 |
« Ответ #541 : 16.01.2013, 23:03:09 » |
|
а что это такое, Item Created? Дата публикации модуля нигде не фиксируется, её нельзя контролировать
дата создания материала. использую компонент Zoo для материалов. там-то много чего применил из этой темы. так вот нужно скрывать определенную позицию в полной версии материала, через какое-то время после его публикации.
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #542 : 16.01.2013, 23:05:31 » |
|
так вот нужно скрывать определенную позицию в полной версии материала, через какое-то время после его публикации.
Элементарно делается на уровне шаблона вывода материала Берем дату публикации материала, прибавляем к ней Nцать секунд, сравниваем с текущим временем и исключаем из показа В идеале это нужно делать в модели компонента, перед передачей данных в шаблон Но к данной теме это никоим образом не относится, совершенно другой вопрос
|
|
|
|
|
Записан
|
|
|
|
tas777
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 55
|
 |
« Ответ #543 : 26.01.2013, 23:16:48 » |
|
Подскажите пожалуйстазз. На главной странице выводится AdsManager и через модуль выводятся новости, эти новости привязываются к ads везде во всех ее меню. Надо сделать так чтобы не привязывалась. Я сделал это так: <?php $Itemid = JRequest::getInt( 'Itemid', 1, 'get' ); $option = JRequest::getVar('option', null); $menu = & JSite::getMenu(); if ($Itemid !== '62') { ?>
<div class="spath"> <jdoc:include type="modules" name="user6" style="xhtml" /> </div> <?php } ?>
а когда включаю ЧПУ он уже неопределяет Itemid.
Можно ли как-то сделать чтобы он это Itemid определял при включеном чпу? или может быть можно сделать исключение для компонента AdsManager? пробовал еще вот так: <?php $Itemid = JRequest::getInt( 'Itemid', 1, 'get' ); $option = JRequest::getVar('option', null); $menu = & JSite::getMenu(); if ($option !== 'com_adsmanager') { ?>
<div class="spath"> <jdoc:include type="modules" name="user6" style="xhtml" /> </div> <?php } ?> но при таком коде, он удаляет модуль новостей везде, и на главной странице и на странице с adsmanagerom
может я делаю ошибку в коде? Подскажите пожалуйста!
|
|
|
|
|
Записан
|
|
|
|
tas777
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 55
|
 |
« Ответ #544 : 27.01.2013, 14:00:35 » |
|
Если кому интересно решил эту проблему исключением модуля для определенных страниц <?php $Itemid = JRequest::getInt( 'Itemid', 1, 'get' ); $option = JRequest::getVar('option', null); $menu = & JSite::getMenu(); $page = JRequest::getVar('page', null); if ($page !== 'show_user' and $page !== 'show_all' and $page !== 'show_profile' and $page !== 'show_rules' and $page !== 'show_category' and $page !== 'write_ad' and $page !== 'show_ad' and $page !== 'show_search') { ?>
<div class="spath"> <jdoc:include type="modules" name="user6" style="xhtml" /> </div> <?php } ?>
вариант решения конечно не очень, но по крайней мере без лишнего обращения к БД.
|
|
|
|
|
Записан
|
|
|
|
graf
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 152
|
 |
« Ответ #545 : 17.02.2013, 15:18:53 » |
|
Как сделать чтобы модуль выводился на нужной странице, например: модуль "test_1" выводился если URL site/katalog/test.html?start=10 модуль "test_2" выводился если URL site/katalog/test.html?start=20
и.т.д через Advanced Module Manager не получается... при условии показывает test 1 при .html?start=10 не срабатывает а с .html показываеться на каждой странице
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #546 : 19.02.2013, 02:10:28 » |
|
Как сделать чтобы модуль выводился на нужной странице, например: модуль "test_1" выводился если URL site/katalog/test.html?start=10 модуль "test_2" выводился если URL site/katalog/test.html?start=20
Отключите SEF, изучите адрес страницы, каким параметром передается start и дальше снова читаем первый пост темы, как поймать параметр и дать условие
|
|
|
|
|
Записан
|
|
|
|
Xander12
Новичок
Репутация: +0/-0
Offline
Сообщений: 4
|
 |
« Ответ #547 : 19.03.2013, 21:34:10 » |
|
Здравствуйте! Подскажите пожалуйста, как мне сделать чтобы модуль отображался отображался везде, кроме материала, в zoo. На сайте onlinefilmik.ru модуль "Сортировать по":. Сейчас модуль находится в позиции left, но будет перенесен в позицию под алфавитом. Попробовал воспользоваться вот этим кодом <?php if (JRequest::getVar('view', null) == 'article'): ?>, заменив "article" на "category", модуль действительно перестает отображаться в материалах, только и на главной странице, и на страницах с тегами, и алфавитом - тоже перестает отображаться
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #548 : 19.03.2013, 22:01:31 » |
|
Посмотри что выведет и замени <?php echo JRequest::getVar('view', ''); ?>
|
|
|
|
|
Записан
|
|
|
|
Xander12
Новичок
Репутация: +0/-0
Offline
Сообщений: 4
|
 |
« Ответ #549 : 19.03.2013, 22:53:10 » |
|
Посмотри что выведет и замени <?php echo JRequest::getVar('view', ''); ?>
пишет ошибку синтаксиса
|
|
|
|
|
Записан
|
|
|
|
mxxx
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 95
|
 |
« Ответ #550 : 20.03.2013, 15:47:13 » |
|
как сделать чтоб позиция user1 отобразился в определенный категории и при полного статьи можно было скрыт? что то у меня самостоятельно не получается. прошу помочь.
|
|
|
|
|
Записан
|
|
|
|
mxxx
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 95
|
 |
« Ответ #551 : 21.03.2013, 11:21:44 » |
|
есть кто нибудь? прощу помочь.
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #552 : 21.03.2013, 12:50:16 » |
|
<?php $option = JRequest::getVar('option', ''); $catid = JRequest::getInt( 'catid', 0); $view = JRequest::getVar('view', ''); //Показываем только для категории 5 if ($option == 'com_content' && $catid == 5 && $view != 'article'): ?> <jdoc:include type="modules" name="user1" style="xhtml" /> <?php endif; ?>
|
|
|
|
|
Записан
|
|
|
|
mxxx
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 95
|
 |
« Ответ #553 : 21.03.2013, 19:18:28 » |
|
<?php $option = JRequest::getVar('option', ''); $catid = JRequest::getInt( 'catid', 0); $view = JRequest::getVar('view', ''); //Показываем только для категории 5 if ($option == 'com_content' && $catid == 5 && $view != 'article'): ?> <jdoc:include type="modules" name="user1" style="xhtml" /> <?php endif; ?> Спасибо но при не работает && $catid == 5 категория у меня так http://сайт/moy-yubiley/19-sobitya/ код поставил <?php $option = JRequest::getVar('option', ''); $catid = JRequest::getInt( 'catid', 0); $view = JRequest::getVar('view', ''); //Показываем только для категории 5 if ($option == 'com_content' && $catid == 19 && $view != 'article'): ?> <jdoc:include type="modules" name="user1" style="xhtml" /> <?php endif; ?> не помогает if ($option == 'com_content' && $view != 'article'): а так работает актуально. жду хелп.
|
|
|
|
« Последнее редактирование: 21.03.2013, 19:25:50 от mxxx »
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #554 : 21.03.2013, 19:32:51 » |
|
<?php $option = JRequest::getVar('option', ''); $id = JRequest::getInt( 'id', 0); $view = JRequest::getVar('view', ''); //Показываем только для категории 5 if ($option == 'com_content' && $id == 5 && $view != 'article'): ?> <jdoc:include type="modules" name="user1" style="xhtml" /> <?php endif; ?> Ошибся по ходу. Вместо $catid надо $id. catid используется в Joomla 3
|
|
|
|
« Последнее редактирование: 21.03.2013, 19:40:57 от Fedor Vlasenko »
|
Записан
|
|
|
|
mxxx
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 95
|
 |
« Ответ #555 : 21.03.2013, 19:36:24 » |
|
спасибо большое. выручили
|
|
|
|
|
Записан
|
|
|
|
noobie
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 48
|
 |
« Ответ #556 : 08.04.2013, 10:19:16 » |
|
Подскажите пожалуйста условие выполняющее следующее действие. Когда открыта полностью статья, блоки с позиций pos_1, pos_2, и pos_4, убираются. Заранее спасибо.
|
|
|
|
|
Записан
|
|
|
|
noobie
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 48
|
 |
« Ответ #557 : 08.04.2013, 17:39:51 » |
|
Форум вымер, пишу не ответа не привета. Люди добрые, подскажите условие при котором можно запрещать вывод ненужных блоков в раскрытой статье.
|
|
|
|
|
Записан
|
|
|
|
Shustry
Группа развития
   
Репутация: +352/-0
Offline
Пол: 
Сообщений: 2403
Заяц, который любит давать советы
|
 |
« Ответ #558 : 08.04.2013, 17:47:40 » |
|
Форум вымер, пишу не ответа не привета. Люди добрые, подскажите условие при котором можно запрещать вывод ненужных блоков в раскрытой статье.
Да выше же буквально тоже самое написал Фёдор! В вашем случае будет: <?php $option = JRequest::getVar('option', ''); $view = JRequest::getVar('view', ''); if ($option !== 'com_content' && $view !== 'article'){ ?> <jdoc:include type="modules" name="user1" style="xhtml" /> <?php }; ?> Апдейт: даже можно сократить это дело. Ни разу не видал ни в одном компоненте кроме com_content вида article. Выводим короче: <?php if (JRequest::getVar('view')!== 'article'){ ?> <jdoc:include type="modules" name="user1" style="xhtml" /> <?php }; ?>
|
|
|
|
« Последнее редактирование: 08.04.2013, 17:52:32 от Shustry »
|
Записан
|
|
|
|
noobie
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 48
|
 |
« Ответ #559 : 08.04.2013, 21:27:25 » |
|
Shustry! Огромное человеческое спасибо, то что нужно. Смог реализовать все, что хотел. Правда, если не затруднит возникло два вопроса. 1. А можно прописать, чтобы не выводилась категория, к которой принадлежит статья? Так как теперь над заголовком статьи идет название категории. 2. Посоветуйте литературу по данной тематике. Я понимаю что у вас опыт, и вы не полезли читать книжку перед ответом, но все же. С чего начать изучение таких определений ??
|
|
|
|
|
Записан
|
|
|
|
wd
Давно я тут
  
Репутация: +7/-1
Offline
Пол: 
Сообщений: 335
Просто юзер
|
 |
« Ответ #560 : 13.04.2013, 22:35:01 » |
|
<?php $option = JRequest::getVar('option', ''); $view = JRequest::getVar('view', ''); if ($option !== 'com_content' && $view !== 'article'){ ?> <jdoc:include type="modules" name="user1" style="xhtml" /> <?php }; ?> Подскажите, пожалуйста, можно ли то же самое сделать для компонента YooTheme ZOO? Joomla 2.5.9 + ZOO 3.0.11 Или к примеру разрешить вывод модуля только на определенных страницах (например на "ru/catalogue" и "en/catalogue").
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #561 : 13.04.2013, 22:49:13 » |
|
да можно. посмотрите не sеf ссылки и покажите нам. Или из вашего примера <?php if ($_SERVER['REQUEST_URI']=='/ru/catalogue' || $_SERVER['REQUEST_URI']=='/en/catalogue'): ?> здесь делаем что-то <?php endif; ?>
|
|
|
|
|
Записан
|
|
|
|
wd
Давно я тут
  
Репутация: +7/-1
Offline
Пол: 
Сообщений: 335
Просто юзер
|
 |
« Ответ #562 : 13.04.2013, 23:08:04 » |
|
да можно. посмотрите не sеf ссылки и покажите нам. Или из вашего примера <?php if ($_SERVER['REQUEST_URI']=='/ru/catalogue' || $_SERVER['REQUEST_URI']=='/en/catalogue'): ?> здесь делаем что-то <?php endif; ?> Спасибо + 
|
|
|
|
|
Записан
|
|
|
|
Jeray
Новичок
Репутация: +0/-0
Offline
Сообщений: 9
|
 |
« Ответ #563 : 19.04.2013, 21:28:43 » |
|
А у меня вот такой вопрос: можно ли вытащить ссылку из переменной в хлебных крошках? Взяв за основу вот это решение для скрытия пагинации VirtueMart: $pageNav->getPagesLinks(); - получить ссылки туда\обратно <?php $pag_string=$pagenav->getPagesLinks( $search_string ); if(!strpos($pag_string,'href')) return; ?> Все это нужно для скрытия хлебных крошек с главных (не с избранной) страниц. Нужно показывать крошки только на внутренних страницах сайта.
|
|
|
|
|
Записан
|
|
|
|
|
|
Jeray
Новичок
Репутация: +0/-0
Offline
Сообщений: 9
|
 |
« Ответ #565 : 19.04.2013, 23:09:07 » |
|
В моем случае эти решения не работают. Вывожу пунктом меню блог раздела который в себя включает блог категорий. Поможет если сделать проверку на наличие ссылки в крошках. Если есть ссылка то выводим модуль, если просто текст вывод не нужен.
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #566 : 19.04.2013, 23:20:12 » |
|
Что такое внутренние страницы сайта? Правильно и понятливо сформулируйте вопрос. Где нужны хлебные крошки, а где нет?
|
|
|
|
|
Записан
|
|
|
|
Jeray
Новичок
Репутация: +0/-0
Offline
Сообщений: 9
|
 |
« Ответ #567 : 20.04.2013, 11:02:22 » |
|
При переходе на сайт, если нажать любой пункт меню, то мы попадаем на "главную" страницу нажатого пункта меню (крошки не нужны на этой странице). На этой странице отображаются 4 материала в виде блога (вступительный текст и кнопка подробнее). При переходе в материал, крошки должны присутствовать (указывая путь до этого материала)
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #568 : 20.04.2013, 11:31:39 » |
|
Оберните вывод позиции хлебных крошек условием в своем шаблоне(строчка сверху, строчка снизу) <?php if (JRequest::getVar('view', null)=='article'):?> <jdoc:include type="modules" name="you_module_pozition" style="xhtml" /> <?php endif;>
|
|
|
|
|
Записан
|
|
|
|
Jeray
Новичок
Репутация: +0/-0
Offline
Сообщений: 9
|
 |
« Ответ #569 : 20.04.2013, 13:53:35 » |
|
Спасибо за решение. Но это будет работать только если попасть в сам материал.
На сайте пунктом меню еще выводиться категории VirtueMart и есть пункт меню в котором выводиться, шаблон блога раздела на котором отображается шаблон блога категории.
Думаю универсальным решение будет если прогнать переменную крошек на наличии ссылки в ней, способом в качестве примера который я описал выше.
|
|
|
|
|
Записан
|
|
|
|
|