|
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
Группа развития
   
Репутация: +577/-5
Offline
Пол: 
Сообщений: 5189
effrit.com
|
 |
« Ответ #331 : 01.04.2011, 08:32:10 » |
|
я так понимаю, что только через запрос к бд <?php $Itemid = JRequest::getInt( 'Itemid', 999, 'get' );
$db =& JFactory::getDBO(); $sql = "SELECT menutype FROM #__menu WHERE id = ".$Itemid ; $db->setQuery( $sql ); $row=$db->loadResult();
echo $Itemid."-->".$row; ?>
в итоге мы получаем на ID меню, а его системное имя. поэтому условие будет выглядеть так
if ($row=="mainmenu") { }
системное имя можно посмотреть в менеджере меню, третий столбец
|
|
|
|
|
Записан
|
|
|
|
|
SmokerMan
|
 |
« Ответ #332 : 01.04.2011, 08:51:52 » |
|
По типу меню можно. <?php $menu = & JSite::getMenu(); if ($menu->getActive()->menutype == 'mainmenu') : ?> тра ля ля <?php endif; ?>
effrit чего-то ты намудрил 
|
|
|
|
|
Записан
|
|
|
|
liten
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Пол: 
Сообщений: 30
не забываем про + и -
|
 |
« Ответ #333 : 01.04.2011, 23:45:49 » |
|
По типу меню можно. <?php $menu = & JSite::getMenu(); if ($menu->getActive()->menutype == 'mainmenu') : ?> тра ля ля <?php endif; ?>
effrit чего-то ты намудрил  Вот так и думала, что где то в этом условии нужно ковырять код? спасибо я так понимаю, что только через запрос к бд <?php $Itemid = JRequest::getInt( 'Itemid', 999, 'get' );
$db =& JFactory::getDBO(); $sql = "SELECT menutype FROM #__menu WHERE id = ".$Itemid ; $db->setQuery( $sql ); $row=$db->loadResult();
echo $Itemid."-->".$row; ?>
в итоге мы получаем на ID меню, а его системное имя. поэтому условие будет выглядеть так
if ($row=="mainmenu") { }
системное имя можно посмотреть в менеджере меню, третий столбец Спасибо! правда до понимания этого варианта мне еще далековато )))
|
|
|
|
|
Записан
|
|
|
|
zmeyx
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 69
http://www.nt1.su
|
 |
« Ответ #334 : 02.04.2011, 01:42:24 » |
|
Уважаемые Гуру, прошу помощи... Есть позиция модуля (выводится только на главной - а главная это каталог виртуя) при переходах по меню - модуль исчезает (так и должно быть) но! при поиске, или того хуже при пользовании расширенным фильтром для VirtueMart (сторонним) модуль не пропадает. Внимание вопрос: как сделать так, что бы модуль выводился исключительно на главной, и пропадал при любой смене страницы (неважно по меню ушли или нет)
|
|
|
|
|
Записан
|
|
|
|
|
SmokerMan
|
 |
« Ответ #335 : 02.04.2011, 01:51:11 » |
|
Внимание вопрос:
в "что где когда" играем?  условие свое в студию!
|
|
|
|
|
Записан
|
|
|
|
zmeyx
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 69
http://www.nt1.su
|
 |
« Ответ #336 : 02.04.2011, 01:55:30 » |
|
Сорри если путано объяснил. www.0nt.ru модуль хиты продаж... вот он должен быть только на главной.. и больше нигде... что бы его не было в результатах поиска или еще где
Сейчас он привязан только к меню Главная, и все
|
|
|
|
|
Записан
|
|
|
|
|
SmokerMan
|
 |
« Ответ #337 : 02.04.2011, 02:10:11 » |
|
zmeyxво первых это не та тема где нужно давать ссылки на сайт, т.к. они здесь бесполезны  во вторых перечитайте внимательно первый пост, если чего-нибудь поймете приложите кусок кода, тогда может вам помогут
|
|
|
|
|
Записан
|
|
|
|
zmeyx
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 69
http://www.nt1.su
|
 |
« Ответ #338 : 02.04.2011, 02:44:47 » |
|
<?php $Itemid = JRequest::getInt( 'Itemid', 1, 'get' ); //получем текущий ItemID, если не определен – то по умолчанию будет 1 $option = JRequest::getVar('option', null); // получаем название текущего компонента, в нашем случае будет com_content либо NULL $view = JRequest::getVar('view', null); // получаем значение текущей вьюшки ?> <?php if (($option == 'com_virtuemart') && ($Itemid == '1')) { ?> вуаля <?php } else {} ?> Попробовал такой вариант - но желаемого не добился... при переходе не по меню модуль (надпись для простоты) остается на месте
|
|
|
|
« Последнее редактирование: 02.04.2011, 17:48:36 от zmeyx »
|
Записан
|
|
|
|
|
beliyadm
|
 |
« Ответ #339 : 08.04.2011, 10:42:18 » |
|
Попробовал такой вариант - но желаемого не добился... при переходе не по меню модуль (надпись для простоты) остается на месте
Приведите полный УРЛ страницы куда переходите и остается надпись (без включенного SEF)
|
|
|
|
|
Записан
|
|
|
|
TakT
Осваиваюсь на форуме
 
Репутация: +8/-0
Offline
Пол: 
Сообщений: 118
|
 |
« Ответ #340 : 08.04.2011, 20:45:36 » |
|
привет всем!! есть не большой вопрос
у меня стоит Joomla 1.6, есть модуль последних добавленных новостей, мне нужно было добавить сслыку в конце модуля на все новости(ссылка на категорию из которой черпаются все эти новости),стандартными средствами Joomla что т не придумал как это сделать, полез в код писать условие, но что т не соображу как,(сайт двух язычный)
алгоритм примерно такой:
проверяем какой в данный момент включен язык, если анг то выводим линк на анг, если иной то на русском
может кто знает как сделать проверку на текущия язык?
|
|
|
|
|
Записан
|
|
|
|
TakT
Осваиваюсь на форуме
 
Репутация: +8/-0
Offline
Пол: 
Сообщений: 118
|
 |
« Ответ #341 : 08.04.2011, 21:12:49 » |
|
попробовал так: <?php if ($page ='index.php?lang=ru') { ?> <a href="index.php?option=com_content&view=category&id=77">Показать все новости</a> <? } else { ?> <a href="index.php?option=com_content&view=category&id=77">Show all news</a> <? } ?>
|
|
|
|
|
Записан
|
|
|
|
TakT
Осваиваюсь на форуме
 
Репутация: +8/-0
Offline
Пол: 
Сообщений: 118
|
 |
« Ответ #342 : 08.04.2011, 21:13:52 » |
|
попробовал так: <?php if ($page ='index.php?lang=ru') { ?> <a href="index.php?option=com_content&view=category&id=77">Показать все новости</a> <? } else { ?> <a href="index.php?option=com_content&view=category&id=77">Show all news</a> <? } ?>
не получается, всегда выводит на русском, а это значит что в моей писанине где то ошибка
|
|
|
|
|
Записан
|
|
|
|
zmeyx
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Пол: 
Сообщений: 69
http://www.nt1.su
|
 |
« Ответ #343 : 08.04.2011, 22:15:01 » |
|
Решил все таким образом: проверяем вставкой: <?php echo $_SERVER['REQUEST_URI']; ?> и то что содержится в ней вставляем в адрес кода: <?php $sv = $_SERVER['REQUEST_URI']; if ($sv == 'вставляем полученный код') { ?> главная <?php } else { ?> не главная <?php } ?> именно так решился вопрос с отображением только на главной странице
|
|
|
|
|
Записан
|
|
|
|
DrMartens
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 100
|
 |
« Ответ #344 : 14.04.2011, 16:01:04 » |
|
ну то как поставить модуль только на главной странице VirtueMart? главной страницей сайта не установлен VM. Кто-то решил эту проблему?
|
|
|
|
|
Записан
|
|
|
|
drobinkin
Осваиваюсь на форуме
 
Репутация: +4/-0
Offline
Пол: 
Сообщений: 74
Старый пират
|
 |
« Ответ #345 : 22.05.2011, 12:39:49 » |
|
|
|
|
|
« Последнее редактирование: 22.05.2011, 13:07:42 от drobinkin »
|
Записан
|
|
|
|
sap
Захожу иногда

Репутация: +1/-0
Offline
Пол: 
Сообщений: 12
|
 |
« Ответ #346 : 11.06.2011, 16:36:01 » |
|
Подскажите а можно проверить на наличие контента в модуле, если есть пункты меню в на этом уровне то выводим колонку с меню, если нет пунктов меню для этого уровня то колонку с меню не выводим?
|
|
|
|
|
Записан
|
|
|
|
|
al-teen
|
 |
« Ответ #347 : 11.06.2011, 17:14:47 » |
|
<?php if($this->countModules('right')) : ?> <div id="right"> <jdoc:include type="modules" name="right" style="xhtml" /> </div> <?php endif; ?>
|
|
|
|
|
Записан
|
|
|
|
Sergius
Новичок
Репутация: +0/-0
Offline
Сообщений: 2
|
 |
« Ответ #348 : 23.06.2011, 09:15:19 » |
|
Подскажите, у меня есть три класса (схема1 - центральный блок на всю ширину, схема2 - без правой колонки и схема3 - без левой колонки). Главная страница у меня 3 колонки, как мне сделать, что бы при отсутствии модулей в левой колонке, центральная не просто занимала всю ширину левой, но и подключался класс схема3 без левой колонки? Все классы у меня в одном CSS файле.
|
|
|
|
|
Записан
|
|
|
|
koshsh
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Пол: 
Сообщений: 186
|
 |
« Ответ #349 : 24.06.2011, 19:54:31 » |
|
Приветствую! Искал как к пунктам меню привязать разные файлы CSS для изменения шаблона, нашел такую информацию, попробовал вариант с таким кодом для Итемида: <?php if ($Itemid == '107') { echo "<link href="мой шаблон/css/te11111.css" rel="stylesheet" type="text/css" />" ; } else{ echo "<link href="мой шаблон/css/template_css.css" rel="stylesheet" type="text/css"/>"; } ?> Но условие почему то не хотит работать. Что тут не так?
|
|
|
|
|
Записан
|
|
|
|
TakT
Осваиваюсь на форуме
 
Репутация: +8/-0
Offline
Пол: 
Сообщений: 118
|
 |
« Ответ #350 : 24.06.2011, 19:56:34 » |
|
Приветствую! Искал как к пунктам меню привязать разные файлы CSS для изменения шаблона, нашел такую информацию, попробовал вариант с таким кодом для Итемида: <?php if ($Itemid == '107') { echo "<link href="мой шаблон/css/te11111.css" rel="stylesheet" type="text/css" />" ; } else{ echo "<link href="мой шаблон/css/template_css.css" rel="stylesheet" type="text/css"/>"; } ?> Но условие почему то не хотит работать. Что тут не так? слушай а поделись ка зачем тебе к каждому пункту меня подключать отдельный CSS файл?
|
|
|
|
|
Записан
|
|
|
|
b2z
Support Team
   
Репутация: +328/-0
Offline
Пол: 
Сообщений: 3900
Contra Gaming Community
|
 |
« Ответ #351 : 25.06.2011, 16:19:14 » |
|
Но условие почему то не хотит работать. Что тут не так?
Возможно из-за неполного пути. Попробуйте такой вариант: <link href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template ?>/css/te11111.css" rel="stylesheet" type="text/css" />
|
|
|
|
|
Записан
|
|
|
|
koshsh
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Пол: 
Сообщений: 186
|
 |
« Ответ #352 : 25.06.2011, 18:53:13 » |
|
слушай а поделись ка зачем тебе к каждому пункту меня подключать отдельный CSS файл? В общем если чесно, мне надо менять фоны body по нажатию на пункты меню. Пытался для этой задачи использовать плагин mmbackground, вроде с задачей справляется, но через полдня почему то начинает сыпаться =) и так два раза подряд переустанавливал, вначале хорошо, потом перестает работать. Потому и ищу альтернативный метод привязки стилей в Итемидам меню. Может у вас TakT, есть вариант сделать проще?  Возможно из-за неполного пути. Я прописывал полный путь для проверки вот так: <link href="http://www.integra-trade.com/templates/tpl_ja_antares_j15/css/template_css.css" rel="stylesheet" type="text/css"/>
|
|
|
|
|
Записан
|
|
|
|
TakT
Осваиваюсь на форуме
 
Репутация: +8/-0
Offline
Пол: 
Сообщений: 118
|
 |
« Ответ #353 : 25.06.2011, 21:02:25 » |
|
koshsh
ты надеюсь это условие между тегов HEAD прописываешь? и тут мне кажется проверять лучше через switch-case
|
|
|
|
|
Записан
|
|
|
|
b2z
Support Team
   
Репутация: +328/-0
Offline
Пол: 
Сообщений: 3900
Contra Gaming Community
|
 |
« Ответ #354 : 25.06.2011, 21:09:11 » |
|
koshsh
ты надеюсь это условие между тегов HEAD прописываешь?
Да, я сейчас тоже заметил, что там почему-то echo.
|
|
|
|
|
Записан
|
|
|
|
TakT
Осваиваюсь на форуме
 
Репутация: +8/-0
Offline
Пол: 
Сообщений: 118
|
 |
« Ответ #355 : 25.06.2011, 21:22:05 » |
|
koshsh у тебя ошибка в синтаксисе: <?php if ($Itemid == '107') { echo "<link href="мой шаблон/css/te11111.css" rel="stylesheet" type="text/css" />" ; } else{ echo "<link href="мой шаблон/css/template_css.css" rel="stylesheet" type="text/css"/>"; } ?> если ты ЭХО открыл "" - двойными ковычками то внутри уже не должны больше встречаться двойные кавычки должно быть так: <?php if ($Itemid == '107') { echo "<link href='мой шаблон/css/te11111.css' rel='stylesheet' type='text/css' />" ; } else{ echo "<link href='мой шаблон/css/template_css.css' rel='stylesheet' type='text/css'/>"; } ?>
|
|
|
|
|
Записан
|
|
|
|
|
al-teen
|
 |
« Ответ #356 : 25.06.2011, 22:20:21 » |
|
Не понимаю, зачем вы мучаетесь с быдлокодерскими конструкциями? Отделяйте логику от представления. рнр отдельно, HTML отдельно. Меньше проблем, больше удобства. <?php if ($Itemid == '107') : ?> <link href='мой шаблон/css/te11111.css' rel='stylesheet' type='text/css' /> <?php else: ?> <link href='мой шаблон/css/template_css.css' rel='stylesheet' type='text/css'/> <?php endif; ?>
|
|
|
|
|
Записан
|
|
|
|
koshsh
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Пол: 
Сообщений: 186
|
 |
« Ответ #357 : 26.06.2011, 18:07:00 » |
|
Спасибо всем, учел все моменты, вижу что стили грузятся, но условие работает неправильно, я подставляю Itemid пункта меню который посмотрел в урле, например таком http://integra-trade.com/index.php?option=com_content&view=article&id=62& Itemid=131&lang=ru потом ставлю в условие, чтоб если нажимаю на этот пункт, то... if ($Itemid == '131') и почему то стили меняются но не по условию, а как хотят! чё за...? 
|
|
|
|
|
Записан
|
|
|
|
|
al-teen
|
 |
« Ответ #358 : 26.06.2011, 18:12:58 » |
|
Стиль сам, в CSS перепроверьте
|
|
|
|
|
Записан
|
|
|
|
|
Dorfman
|
 |
« Ответ #359 : 08.07.2011, 10:54:54 » |
|
Сдаётся мне, добрая половина вышеупомянутых вопросов могла быть разрешена с помощью http://www.nonumber.nl :-))))))))
|
|
|
|
|
Записан
|
|
|
|
avex
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 186
|
 |
« Ответ #360 : 10.07.2011, 15:27:24 » |
|
Прошу совета, вопрос не был решен в теме - http://joomlaforum.ru/index.php/topic,169253.0.htmlВкратце скажу, что нужно запретить всему множеству статей (видеоклипов в данном случае), относящихся к одной категории, выводиться в остальных категориях. По URI сделать это невозможно, так как адрес любого клипа имеет такой вид - http://сайт/index.php?option=com_hwdvideoshare&task=viewvideo&Itemid=61&video_id=1 , отличаясь лишь последним числом id. Как видим, по адресу никак не идентифицировать категорию. Кто что посоветует? Буду очень признателен специалистам.
|
|
|
|
|
Записан
|
|
|
|
|