|
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 »
|
Записан
|
|
|
|
| |
combat1988
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #181 : 25.08.2010, 17:36:32 » |
|
Помогите пожалуйста с проблемой!
У меня есть шапка сайта, топ меню. далее загвоздка! Мне нужно сделать 4 фрейма квадратом 1 2 с разными материалами из различных тем, и чтобы в них можно было просматривать 3 4 материалы из различных разделов и категорий!
Что прописать в шаблоне чтобы он мог так выводить только на главной? Как это выводить только на главной я уже понял, а вот как 4 фрейма с различными материалами сделать не понимаю !
|
|
|
|
|
Записан
|
|
|
|
Elena09
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 98
|
 |
« Ответ #182 : 03.09.2010, 13:37:52 » |
|
У меня два сайдбара и оба слева, правый как раз надо скрыть,при отсутствии модуля,и main растянуть по ширине. делаю 1 – если на позиции RIGHT не опубликовано ни одного модуля, то не показываем определенный блок сайта и какая-то хрень выходит((
|
|
|
|
|
Записан
|
|
|
|
Professor
Осваиваюсь на форуме
 
Репутация: +8/-0
Offline
Пол: 
Сообщений: 67
|
 |
« Ответ #183 : 03.09.2010, 22:20:34 » |
|
и какая-то хрень выходит((
знаете, какой вопрос, такой и ответ будет
|
|
|
|
|
Записан
|
|
|
|
|
igoryk
|
 |
« Ответ #184 : 05.09.2010, 18:39:06 » |
|
очень нужно прописать условие в шаблоне для вывода нескольких блоков в позиции right только для VirtueMart как это сделать? При просмотре главной, и всего кроме VM модули в позиции right скрыты, отображаются только модули из позиций left, banner, top и т.д. -  нужно, чтобы - при просмотре категорий, карточки товара, и всего что в VM - отображались блоки в позиции right а left была скрыта  И еще - при переходе в категорию товара с главной видим - КАК ПОБОРОТЬ ?
|
|
|
|
« Последнее редактирование: 05.09.2010, 18:45:00 от igoryk »
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #185 : 06.09.2010, 00:41:54 » |
|
КАК ПОБОРОТЬ ? Смотрите в адресную строку, берите параметры из URL, читайте еще раз первое сообщение данной темы и пишите условия в шаблоне, что еще можно сказать то, никаких принципиальных сложностей я здесь не вижу
|
|
|
|
|
Записан
|
|
|
|
|
igoryk
|
 |
« Ответ #186 : 06.09.2010, 02:42:51 » |
|
Смотрите в адресную строку, берите параметры из URL, читайте еще раз первое сообщение данной темы и пишите условия в шаблоне, что еще можно сказать то, никаких принципиальных сложностей я здесь не вижу
Читал, читаю, пробую, но не получается  Поэтому и прошу помощи... вот какая ссылка при переходе с главной - левый блок не отображается (а нужен) xxx/index.php?option=com_virtuemart&page=shop.browse&category_id=231 а при переходе с других страниц - левый блок отображается xxx/index.php?option=com_virtuemart&page=shop.browse&category_id=231&Itemid=71
|
|
|
|
« Последнее редактирование: 06.09.2010, 02:49:40 от igoryk »
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #187 : 06.09.2010, 09:40:19 » |
|
вот какая ссылка при переходе с главной - левый блок не отображается (а нужен) xxx/index.php?option=com_virtuemart&page=shop.browse&category_id=231
а при переходе с других страниц - левый блок отображается xxx/index.php?option=com_virtuemart&page=shop.browse&category_id=231&Itemid=71
Естественно, показ блоков, заданных к показу в админке модуля работает от ItemID (идентификатор пункта меню) При равных прочих параметрах ссылок в первой ссылке у вас блок и не отображается, потому что не задан этот параметр. Почему в первой отсутствует Itemid - понятия не имею, надо разбираться (либо в индексе шаблона жестко задавать показ левого блока условиями от $option == 'com_virtuemart' && $page == 'shop.browse')
|
|
|
|
|
Записан
|
|
|
|
|
igoryk
|
 |
« Ответ #188 : 06.09.2010, 22:51:32 » |
|
Естественно, показ блоков, заданных к показу в админке модуля работает от ItemID (идентификатор пункта меню) При равных прочих параметрах ссылок в первой ссылке у вас блок и не отображается, потому что не задан этот параметр. Почему в первой отсутствует Itemid - понятия не имею, надо разбираться (либо в индексе шаблона жестко задавать показ левого блока условиями от $option == 'com_virtuemart' && $page == 'shop.browse')
Очень прошу - можно поподробней?вод код страницы (без всякой шелухи) естественно он складывается как надо с помощью CSS где и как что прописать, чтобы првай блок отображался только при просмотре virtuemart ? <div id="main"> <?php if(!$tmpTools->isFrontPage()) : ?> <div id="breadcrumbs"> <jdoc:include type="module" name="breadcrumbs" /> </div> <?php endif ; ?> <div id="bread_crumbs_not"></div> <!-- left_section --> <div id="sidebar_left_section"> <div id="left_box"> <!-- left block --> <?php if( $this->countModules('left') ) {?> <jdoc:include type="modules" name="left" style="left" /> <?php } ?> <!--end left block -->
</div> </div> <!-- end left_section -->
<!-- right_section --> <div id="right_block"> <?php if( $this->countModules('right') ) {?> <jdoc:include type="modules" name="right" style="right" /> <?php } ?> </div> <!-- end right_section -->
<!-- main_content --> <div id="news_main_section"> <?php if(!$tmpTools->isFrontPage()) : ?> <div id="main_search"><jdoc:include type="component" /></div> <?php endif; ?> </div> <!-- end main_content --> </div>
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #189 : 07.09.2010, 11:19:39 » |
|
где и как что прописать, чтобы првай блок отображался только при просмотре virtuemart ?
<?php $option = JRequest::getVar('option', null); ?> <!-- right_section --> <?php if( $option == 'com_virtuemart' ) {?> <div id="right_block"> <?php if( $this->countModules('right') ) {?> <jdoc:include type="modules" name="right" style="right" /> <?php } ?> </div> <?php } ?> Таким условием весь див right_block показывается только на странице вирта. При этом надо учитывать, что на других страницах, где не будет правого блока надо растягивать центр на оставшееся пространство (зависит от дизайна), то есть условие надо продлевать и на <div id="main">
|
|
|
|
|
Записан
|
|
|
|
|
igoryk
|
 |
« Ответ #190 : 07.09.2010, 13:33:31 » |
|
Таким условием весь див right_block показывается только на странице вирта. При этом надо учитывать, что на других страницах, где не будет правого блока надо растягивать центр на оставшееся пространство (зависит от дизайна), то есть условие надо продлевать и на <div id="main">
на остальных страницах - будет правый блок  вечером попробую - отпишусь... Спасибо!
|
|
|
|
|
Записан
|
|
|
|
Arina
Давно я тут
  
Репутация: +1/-0
Offline
Пол: 
Сообщений: 203
|
 |
« Ответ #191 : 07.09.2010, 14:02:57 » |
|
Ребят, у кого есть код для вывода модуля ТОЛЬКО на Главной ? (у меня главная страница не frontpage, а "Категория / Блог"
|
|
|
|
|
Записан
|
|
|
|
|
SmokerMan
|
 |
« Ответ #192 : 07.09.2010, 14:11:40 » |
|
Ребят, у кого есть код для вывода модуля ТОЛЬКО на Главной ? (у меня главная страница не frontpage, а "Категория / Блог"
 а топик почитать никак нельзя? 7 – универсальный способ проверки на главную страницу
|
|
|
|
|
Записан
|
|
|
|
Arina
Давно я тут
  
Репутация: +1/-0
Offline
Пол: 
Сообщений: 203
|
 |
« Ответ #193 : 07.09.2010, 14:20:08 » |
|
решила проблему вывода модуля только на главную страницу, вот код, пользуйтесь)))
<?php $menu = & JSite::getMenu(); if ($menu->getActive() == $menu->getDefault() && !JRequest::getInt('limitstart') && JRequest::getWord('layout') == 'blog') { ?> <div id="mainmodules" class="spacer"><td class="main"><jdoc:include type="modules" name=" ЗДЕСЬ ВПИСАТЬ НАИМЕНОВАНИЕ МОДУЛЯ" style="main" /></td></div> <?php } ?>
|
|
|
|
|
Записан
|
|
|
|
|
igoryk
|
 |
« Ответ #194 : 08.09.2010, 10:33:10 » |
|
на остальных страницах - будет правый блок  вечером попробую - отпишусь... вроде проблема решилась - теперь правый блок выводится только при VirtueMart. но проблема с переходом с главной страницы - осталась - не выводится правый блок - ссылка с главной имеет вид - xxx/index.php?option=com_virtuemart&page=shop.browse&category_id=236 xxx/index.php?option=com_virtuemart&page=shop.browse&category_id=236&Itemid=103 т.е. - когда присутствует &Itemid=xxx правый блок выводится, а когда его нет - нет Подскажите, как это побороть.
|
|
|
|
|
Записан
|
|
|
|
creative3d
Осваиваюсь на форуме
 
Репутация: +3/-0
Offline
Сообщений: 65
|
 |
« Ответ #195 : 09.09.2010, 15:24:10 » |
|
Здравствуйте! А какое нужно создать условие, чтобы часть текста на страничке была доступна только RSS-подписчикам? P.S. Во вложении плагин от wordpress, который выполняет эту функцию, он очень маленький, может его можно легко переписать под Joomla?
|
|
|
|
|
Записан
|
|
|
|
Sergey_Live
Новичок
Репутация: +0/-0
Offline
Сообщений: 4
|
 |
« Ответ #196 : 14.09.2010, 09:48:39 » |
|
Не могу преодолеть грабли(( как узнать id материала? например при: index.php?option=com_content&view=article&id=21 index.php?option=com_content&view=article&id=22 index.php?option=com_content&view=article&id=23 Пробывал GetDocument, но не работает( то есть у меня есть 3 определенных новости с одной категорией com_content и 9 новостей другой категории этого же com_content. То есть проверка $option == 'com_content' && $view == 'article' срабатывает для всех новостей( Может быть мне отследить категории? Но как не знаю (
мне нужно показывать определенный модуль, иначе - другой модуль. ниже привожу пример с проверкой просмотра полной новости
if ($option == 'com_content' && $view == 'article') {?> <jdoc:include type="modules" name="position_for_support_in_kiev"/> <?php }else {?>
<jdoc:include type="modules" name="position_for_package_overview"/>
|
|
|
|
« Последнее редактирование: 14.09.2010, 09:52:21 от Sergey_Live »
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #197 : 14.09.2010, 10:02:24 » |
|
как узнать id материала? например при: index.php?option=com_content&view=article&id=21
Вы читали первое сообщение этой темы? $articleID = JRequest::getInt( 'id', 1, 'get' );
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +515/-5
Online
Пол: 
Сообщений: 5974
effrit.com
|
 |
« Ответ #198 : 14.09.2010, 10:26:19 » |
|
это всё для отрубленного SEF для включённого http://joomlaforum.ru/index.php?topic=95604.0
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #199 : 14.09.2010, 13:39:07 » |
|
это всё для отрубленного SEF для включённого http://joomlaforum.ru/index.php?topic=95604.0
То есть у меня на всех сайтах с включенным стандартным СЕФ все не работает?  Прекрасно работает и с включенным, параметры ведь передаются в любом случае
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +515/-5
Online
Пол: 
Сообщений: 5974
effrit.com
|
 |
« Ответ #200 : 14.09.2010, 13:41:18 » |
|
beliyadm, а категории отслеживаются?
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #201 : 14.09.2010, 13:52:18 » |
|
beliyadm, а категории отслеживаются?
Отслеживаются любые параметры, передаваемые в url, как в стандартных компонентах, так и в самописных, не знаю с чего решили про конфликт с SEF
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +515/-5
Online
Пол: 
Сообщений: 5974
effrit.com
|
 |
« Ответ #202 : 14.09.2010, 17:01:12 » |
|
beliyadm, но реально не пашет определение категори при включении SEF. я сегодня проверял-нуль выдаёт.
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #203 : 14.09.2010, 17:48:53 » |
|
beliyadm, но реально не пашет определение категори при включении SEF. я сегодня проверял-нуль выдаёт.
а если весь массив GET вывести на экран - в нем все будет кроме id категории?
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +515/-5
Online
Пол: 
Сообщений: 5974
effrit.com
|
 |
« Ответ #204 : 14.09.2010, 20:11:51 » |
|
var_dump($_GET); //при отрубленном SEF array(5) { ["option"]=> string(11) "com_content" ["view"]=> string(7) "article" ["id"]=> string(21) "2:2010-09-12-10-07-59" ["catid"]=> string(8) "1:mycat1" ["Itemid"]=> NULL }
var_dump($_GET); //при включенном SEF array(4) { ["option"]=> string(11) "com_content" ["Itemid"]=> NULL ["view"]=> string(7) "article" ["id"]=> string(21) "2:2010-09-12-10-07-59" }
|
|
|
|
|
Записан
|
|
|
|
|
SmokerMan
|
 |
« Ответ #205 : 14.09.2010, 20:34:51 » |
|
при виде материала насколько я помню не будет id категории.
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +515/-5
Online
Пол: 
Сообщений: 5974
effrit.com
|
 |
« Ответ #206 : 14.09.2010, 20:37:43 » |
|
ну вот в посте выше оно и показано  . никаких ["catid"]=> в варианте с сефом просто нет
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #207 : 14.09.2010, 21:23:24 » |
|
ну вот в посте выше оно и показано  . никаких ["catid"]=> в варианте с сефом просто нет Так это потому, собственно, что при показе материала ссылка имеет вид (без сеф) мы имеем ссылку типа index.php?option=com_content&view=article&id=6&Itemid=12 где никакого параметра категории не передается, собственно вот в этом причина, вполне нормальное поведение. Я то говорил про получение параметра из УРЛ, а тут получать нечего, недопонимание вышло )) В таком случае действительно, чтобы найти категорию придется делать запрос к базе через полученное значение ID материала
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +515/-5
Online
Пол: 
Сообщений: 5974
effrit.com
|
 |
« Ответ #208 : 14.09.2010, 21:47:55 » |
|
))) зато поговорили 
|
|
|
|
|
Записан
|
|
|
|
qwerty456
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 20
|
 |
« Ответ #209 : 18.09.2010, 23:05:51 » |
|
не фиг дублировать посты. ты одну тему уже создал UserXP.
|
|
|
|
« Последнее редактирование: 19.09.2010, 00:26:46 от userxp »
|
Записан
|
|
|
|
|
igoryk
|
 |
« Ответ #210 : 24.09.2010, 15:21:45 » |
|
Господа, кто подскажет какое условие нужно прописать, чтобы левый блок отображался абсолютно везде, кроме VirtueMart ? А то я что-то совсем запутался... 
|
|
|
|
|
Записан
|
|
|
|
|