|
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 »
|
Записан
|
|
|
|
| |
effrit
Группа развития
   
Репутация: +521/-6
Offline
Пол: 
Сообщений: 5860
effrit.com
|
 |
« Ответ #271 : 02.11.2010, 13:52:19 » |
|
вот тут универсальный способ получения разделов и категорий. http://joomlaforum.ru/index.php/topic,132312.new.html получаешь по ID статьи Id раздела и делаешь проверку.
|
|
|
|
|
Записан
|
|
|
|
devel2011
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 13
|
 |
« Ответ #272 : 05.11.2010, 04:38:18 » |
|
Доброго времени суток! Использую в index.php следующие конструкции: if (JRequest::getVar('view')=='article' && JRequest::getInt('catid') == 1 && JRequest::getInt('id') == 2) { echo ... ... echo ... }
if (JRequest::getVar('view') == 'category' && JRequest::getInt('id') == 3) { echo ... ... echo ... }
if (JRequest::getVar('view')=='article' && JRequest::getInt('catid') == 3) { echo ... ... echo ... }
и т.п. Интересует вопрос, как реализовать это используя switch/case? В операторе if можно использовать && и || для уточнения условия. А как с помощью case "отловить" условия, если их два и более? П.С. Якобы (!) оператор if делает большую нагрузку на БД, проверяя и выполняя условия. Хочется оптимизировать код, т.к. таких if-ов у меня в index.php десятка полтора. Хочется сократить кол-во обращений к БД, увеличив тем самым скорость генерации страниц сайта (хоть немного)...
|
|
|
|
|
Записан
|
|
|
|
effrit
Группа развития
   
Репутация: +521/-6
Offline
Пол: 
Сообщений: 5860
effrit.com
|
 |
« Ответ #273 : 05.11.2010, 08:14:58 » |
|
ну сильно тако скрипт в плане логики ты не оптимизирвуешь, имхо а вот что конкретно неправильно, так это постоянный вызов JRequest. получи ОДИН раз в переменнуые эти значения и работай с ними уже. $my_view=JRequest::getVar('view'); $my_catid=JRequest::getInt('catid');
if ($my_view==...)
|
|
|
|
|
Записан
|
|
|
|
devel2011
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 13
|
 |
« Ответ #274 : 05.11.2010, 10:04:15 » |
|
ну сильно тако скрипт в плане логики ты не оптимизирвуешь, имхо а вот что конкретно неправильно, так это постоянный вызов JRequest. получи ОДИН раз в переменнуые эти значения и работай с ними уже. $my_view=JRequest::getVar('view'); $my_catid=JRequest::getInt('catid');
if ($my_view==...)
Точняк. Спасибо effrit! Каждый Jrequest - обращение к базе?
|
|
|
|
|
Записан
|
|
|
|
bzzik
JComments Tester
Репутация: +219/-0
Offline
Пол: 
Сообщений: 3798
Contra Gaming Community
|
 |
« Ответ #275 : 05.11.2010, 11:11:27 » |
|
Точняк. Спасибо effrit! Каждый Jrequest - обращение к базе?
Это не обращение к базе, а получение переменных из массивов REQUEST, POST, GET.
|
|
|
|
|
Записан
|
|
|
|
trk
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Сообщений: 85
|
 |
« Ответ #276 : 05.11.2010, 17:29:36 » |
|
Можно ли решить такую задачу? необходимо компонент привязать к пункту меню. Тоесть: ЕСЛИ УСЛОВИЕ ВЫПОЛНЯЕТСЯ (нужный компонент) то СДЕЛАТЬ АКТИВНЫМ (нужный пункт меню) Это необходимо для того чтобы например когда делаем поиск по тегам в Joomla Tags то была привязка к меню и выводились соответствуюшие модули и меню было активным. И не только тут. Как впихнуть нужное значение 'Itemid' (в файле Index.php) чтобы стал активным соответсвующий пункт меню? <?php $option = JRequest::getVar('option', null); if ($option == 'com_НАШКОМПОНЕНТ') { ..............................?.....................................} ?>
<?php $option = JRequest::getVar('option', null); if (($option == 'com_search')or ($option == 'com_tag')) JRequest::setVar('Itemid', 1); ?> - например не дает результата, как правильно?
|
|
|
|
« Последнее редактирование: 06.11.2010, 01:22:51 от trk »
|
Записан
|
|
|
|
|
SmokerMan
|
 |
« Ответ #277 : 07.11.2010, 15:12:46 » |
|
- например не дает результата, как правильно?
почему не дает? должно давать  Как правильно это сложно сказать, потому что не понятно что нужно. Скорее всего просто нужен нормальный роутер для расширения, но опять же это просто догадки 
|
|
|
|
|
Записан
|
|
|
|
volod3000
Давно я тут
  
Репутация: +48/-0
Offline
Пол: 
Сообщений: 361
Чтобы ничего не делать, нужно многое сделать.
|
 |
« Ответ #278 : 10.11.2010, 00:02:20 » |
|
Почему при : <?php if ($Itemid == '1') : ?> <div class="my_fon"></div> <?php endif ?> блок "my_fon" исчезает и с главной тоже, хотя по-условию должен показываться только на главной. Как правильно показать блок "my_fon" только на главной ?
|
|
|
|
|
Записан
|
|
|
|
volod3000
Давно я тут
  
Репутация: +48/-0
Offline
Пол: 
Сообщений: 361
Чтобы ничего не делать, нужно многое сделать.
|
 |
« Ответ #279 : 10.11.2010, 00:32:17 » |
|
Разобрался, забыл определить переменную $Itemid в шаблоне. Снимаю свой вопрос.
|
|
|
|
|
Записан
|
|
|
|
Тимур
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 80
|
 |
« Ответ #280 : 19.11.2010, 20:49:03 » |
|
Подскажите пожалуйста, какой код можно прописать в шаблоне, чтоб можно было скрывать ячейку таблицы, содержащей определенный модуль, когда этот модуль выключен? Как вы наверное поняли, чтоб не было пустого места на экране. Меня интересует именно в случае таблицы. Или в этом случае может вообще легче создать второй шаблон для другой страницы?
|
|
|
|
|
Записан
|
|
|
|
PashkaRu
JComments Tester
Репутация: +87/-4
Offline
Пол: 
Сообщений: 1221
Дедушка Игнат, изыди ((((
|
 |
« Ответ #281 : 19.11.2010, 20:54:32 » |
|
<?php if($this->countModules('ModuleName')) : ?> <td><jdoc:include type="modules" name="ModuleName" /></td> <?php endif; ?> только, вероятно, если таблица не в одну строку, придется еще делать такое же условие, только наоборот, для добавления в верхние и нижние строки таблицы collspan="2" может, проще шаблон на дивах сделать?
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #282 : 19.11.2010, 23:13:56 » |
|
может, проще шаблон на дивах сделать?
Мы не ищем легких путей. Таблицы тем более надежны - ими верстали наши дедушки, так что проверено веками!
|
|
|
|
|
Записан
|
|
|
|
Тимур
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 80
|
 |
« Ответ #283 : 20.11.2010, 01:33:28 » |
|
<?php if($this->countModules('ModuleName')) : ?> <td><jdoc:include type="modules" name="ModuleName" /></td> <?php endif; ?> только, вероятно, если таблица не в одну строку, придется еще делать такое же условие, только наоборот, для добавления в верхние и нижние строки таблицы collspan="2" может, проще шаблон на дивах сделать? Спасибо, сейчас буду пробовать. Могу сделать и на дивах. Что в этом случае изменится?
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #284 : 20.11.2010, 01:36:14 » |
|
Тогда необходимость в подобных костылях отпадет 
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #285 : 20.11.2010, 01:39:09 » |
|
<jdoc:include type="modules" name="ModuleName" style="td" /> modules.php: function modChrome_td($module, &$params, &$attribs) { if (!empty ($module->content)) : ?> <td class="module<?php echo $params->get('moduleclass_sfx'); ?>"> <?php if ($module->showtitle) : ?> <h3><?php echo $module->title; ?></h3> <?php endif; ?> <?php echo $module->content; ?> </td> <?php endif; }
|
|
|
|
|
Записан
|
|
|
|
Тимур
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 80
|
 |
« Ответ #286 : 20.11.2010, 02:00:04 » |
|
danik.html, это мой первый сайт, я мало что понял из твоей подсказки (( Где мне это прописать? Вот, если поможет, напишу часть кода моего шаблона, которая есть на данный момент: <tr> <td height="146" colspan="2" align="left" valign="top"><div style="width:180px; float:left;"><?php mosLoadModules ( 'left' ); ?></div> <div id="main_search" style="width:600px; float:right;"><?php mosMainBody(); ?> </div></td> Задача - добиться того, чтоб при выключенном модуле на позиции left, содержимое модуля mosMainBody вставало на его место и растягивалось в данном случае на 780 пикселей.
|
|
|
|
|
Записан
|
|
|
|
|
Lex
|
 |
« Ответ #287 : 20.11.2010, 02:06:32 » |
|
Шаблон для Joomla 1.0.x Ни один из приведенных кодов не подойдет, ибо ветка форума по Joomla 1.5.х, а это практически другая система.
|
|
|
|
|
Записан
|
|
|
|
Тимур
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 80
|
 |
« Ответ #288 : 20.11.2010, 02:07:57 » |
|
у меня Joomla 1.5.х
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #289 : 20.11.2010, 02:41:51 » |
|
html: <?php if ($this->countModules('left')) { ?> <div class="sidebar"> <jdoc:include type="modules" name="left" style="xhtml" /> </div> <?php } ?> <div class="content<php if ($this->countModules('left')) echo ' wide' ?>"> <jdoc:include type="component" /> </div> css: .sidebar{ width: 180px; float: left; } .content{ width: 600px; float: right; } .content.wide{ width: 780px; }Простота - залог успеха. Чем больше твои знания, тем проще решения.
|
|
|
|
« Последнее редактирование: 20.11.2010, 06:08:58 от danik.html »
|
Записан
|
|
|
|
Тимур
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 80
|
 |
« Ответ #290 : 20.11.2010, 04:36:11 » |
|
danik.html, спасибо, уже что-то похожее. Но вот в чем дело: ширина у класса sidebar при ее изменении в CSS реально изменяется, а вот с двумя другими классами подобного не происходит. Меняю ширину у класса content - ничего не происходит, при этом отображается под модулем Left, а должен отображаться рядом с ним. Может я что напутал?
|
|
|
|
|
Записан
|
|
|
|
pereccivo
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 7
|
 |
« Ответ #291 : 11.12.2010, 21:20:01 » |
|
Подскажите, пожалуйста. У меня при просмотре браузером контент (текст) выезжает за рамки блоков. Получается очень некрасиво. Как исправить, подскажите, пожалуйста.
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #292 : 12.12.2010, 00:29:05 » |
|
Подскажите, пожалуйста. У меня при просмотре браузером контент (текст) выезжает за рамки блоков. Получается очень некрасиво. Как исправить, подскажите, пожалуйста.
никаким боком не относится к данной теме, смотрите свою верстку шаблона
|
|
|
|
|
Записан
|
|
|
|
|
ivanko80
Гость
|
 |
« Ответ #293 : 20.12.2010, 16:58:03 » |
|
Встала передо мной такая задача. Необходимо задать условие в index.php, чтобы вместо группы контейнеров div на внутренних страницах отображалось содержимое модуля, а на главной странице отображались данные контейнеры. Верстаю первый сайт на Joomla , раньше работал на другой CMS. Оттого может и вопросы такие.
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #294 : 20.12.2010, 17:30:52 » |
|
Необходимо задать условие в index.php, чтобы вместо группы контейнеров div на внутренних страницах отображалось содержимое модуля, а на главной странице отображались данные контейнеры.
Посмотрите самое первое сообщение, универсальная проверка на главную страницу, от этого условия и плясать, это раз. Далее если необходимо вывести модуль без оборачивающего дива, то в условии при вставке позиции указать другой стиль модуля, в файле Modules.php шаблона добавить новую функцию, описывающую вывод модуля, это вопрос уже к шаблонизации, есть описания в соответствующем разделе
|
|
|
|
|
Записан
|
|
|
|
Inngrid
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 52
|
 |
« Ответ #295 : 21.12.2010, 15:36:36 » |
|
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 Сработало только на внутренних страницах. Сделала так: <?php if($this->countModules('user1')) : ?> <div id="left"><jdoc:include type="component" /></div> <div id="right"><jdoc:include type="modules" name="user1" style="xhtml" /></div> <?php else: ?> <div id="left100"><jdoc:include type="component" /></div> <?php endif; ?> CSS #left { float: left; margin-left: 1px; width: 560px; padding: 0; background: #c3c8c3; } #left100 {float:left;width:100%;overflow:hidden;} А на главной блок #left тоже растягивается на 100%, и блок #right, хоть и присутствует, но смещается, из-за неверных размеров блока #left. Что не так?
|
|
|
|
|
Записан
|
|
|
|
DrMartens
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 99
|
 |
« Ответ #296 : 22.12.2010, 01:36:25 » |
|
а как вывести модуль на главной странице виртуамарта 1.1.4? за главную страницу установлена страница виртуамарта: /index.php?option=com_virtuemart&Itemid=28 Joomla 1.5.х
|
|
|
|
|
Записан
|
|
|
|
netruxa
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #297 : 25.12.2010, 14:58:34 » |
|
Подскажите плз, какое условие прописать в шаблоне: Есть сайт, в нем есть правый столбец с 2 модулями right и right_online В right_online я вывожу модуль mod_related_items (похожие статьи) Как сделать, если модуль mod_related_items пустой, то вообще не выводить правый столбец? if($this->countModules('right_online')) : не подходит, т.к. всегда он TRUE
|
|
|
|
|
Записан
|
|
|
|
regionkaz
Осваиваюсь на форуме
 
Репутация: +3/-0
Offline
Пол: 
Сообщений: 115
|
 |
« Ответ #298 : 25.12.2010, 21:41:50 » |
|
http://www.nonumber.nl/extensions/advancedmodulemanager Устанавливаем вот это расширение. К параметрам всех моделей добавляется параметр "скрыть если пуст" вкл его и пользуемся.
|
|
|
|
|
Записан
|
|
|
|
|
igoryk
|
 |
« Ответ #299 : 26.12.2010, 21:11:17 » |
|
Кто подскажет - как сделать условие, чтобы скрипт (01.js) подгружался только на главной странице, а на остальных не грузился.
Возможно такое сделать ? если да, то как?
|
|
|
|
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #300 : 26.12.2010, 21:12:23 » |
|
Кто подскажет - как сделать условие, чтобы скрипт (01.js) подгружался только на главной странице, а на остальных не грузился.
в первом посте есть пункт универсальной проверки на главную страницу, берите его и грузите ваш скрипт только на главной
|
|
|
|
|
Записан
|
|
|
|
|