LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
12.02.2012, 14:23:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Различные условия в шаблонах Joomla 1.5  (Прочитано 85827 раз)
0 Пользователей и 1 Гость смотрят эту тему.
beliyadm
Профи
********

Репутация: +1432/-61
Offline Offline

Пол: Мужской
Сообщений: 9254


Севастополь==Россия


« : 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 » Записан
 
PashkaRu
JComments Tester
*

Репутация: +87/-4
Offline Offline

Пол: Мужской
Сообщений: 1299


Дедушка Игнат, изыди ((((


« Ответ #151 : 17.06.2010, 21:42:07 »

да, пропущено пара строк про копи-паст : )
Записан
effrit
Группа развития
*****

Репутация: +515/-5
Offline Offline

Пол: Мужской
Сообщений: 5974


effrit.com


« Ответ #152 : 17.06.2010, 21:42:38 »

млин. не подумал.
надо вставку на низкоуровневом языке для интерфейса "руки юзера" делать.

Записан
effrit
Группа развития
*****

Репутация: +515/-5
Offline Offline

Пол: Мужской
Сообщений: 5974


effrit.com


« Ответ #153 : 17.06.2010, 21:47:29 »

самое интересно, что и в templateDetails.xml прописывать позицию модуля не обязательно : ) главное в самом шаблоне ее указать.

а название сейчас (я че-то даже не заметил, разве так было всегда? или с какой-то версии?) можно прописать прямо в настройках модуля. Там же где позиция указывается, там ее можно просто ВПИСАТЬ : )
ммм. нет под рукой последней версии, на работе гляну.
но в последней безпроблемной .15 версии такого нету Azn
так что мой алгоритм более универсален. Azn
Записан
PashkaRu
JComments Tester
*

Репутация: +87/-4
Offline Offline

Пол: Мужской
Сообщений: 1299


Дедушка Игнат, изыди ((((


« Ответ #154 : 17.06.2010, 21:50:37 »

ну значит я прав. причем щас посмотрел, как они это сделали...

Не обращал на это внимание, потмоу что у меня адвансед модулес стоит постоянно с самого начала. А там как раз можно вписывать имя позиции, но в поле РЯДОМ.
В Joomla же сделано, что можно вписать ИПА КАК ПРЯМО ТАМ, в выпадающем списке : )

Посмотрел как сделано. У них идет <select>, а ниже идет <input>, так вот этот инпут имеет z-index:1000; аболютно позиционирован и накладывается сверху на select : ) хитро как : )


вот скрин
http://s3.amazonaws.com/floomby/6_17_2010/4qUWFKzdEGTtgkx1ifnsQ.jpg

тут правда я файрбагом сместил поле в сторону, чтобы его было видно....
« Последнее редактирование: 17.06.2010, 21:53:44 от PashkaRu » Записан
effrit
Группа развития
*****

Репутация: +515/-5
Offline Offline

Пол: Мужской
Сообщений: 5974


effrit.com


« Ответ #155 : 17.06.2010, 22:11:11 »

опа. гоню Azn
есть такое!
но это они меня удивиииили. такое надо в пасхалки - вписывать своё значение в поле выпадающего списка...
теперь буду во все интерфейсы подозрительно курсором тыкать во все места Azn
Записан
sergik
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 4


« Ответ #156 : 09.07.2010, 02:33:55 »

мне тоже нужно
вписывать своё значение в поле выпадающего списка...

какой модуль это делает?
Записан
regionkaz
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 117


« Ответ #157 : 12.07.2010, 16:37:35 »

Обращаюсь к itemId через GET, при выключенном SEF работает, при включенном нет. Как получить id элемента при включенном SEF?
Записан
userxp
Администратор
*******

Репутация: +388/-6
Offline Offline

Пол: Мужской
Сообщений: 3193


Злой и ужасный бармалей


« Ответ #158 : 12.07.2010, 20:04:46 »

попробуй JSite::getMenu()->getActive();
Записан
regionkaz
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 117


« Ответ #159 : 13.07.2010, 22:50:59 »

а если к id материала, то здесь как быть?
Записан
Mausi
Захожу иногда
**

Репутация: +1/-0
Offline Offline

Пол: Женский
Сообщений: 15



« Ответ #160 : 18.07.2010, 16:56:01 »

Прошу прощения, если такой вопрос уже был. Подскажите, пожалуйста, как вывести текст/модуль в привязке к заданному ID пользователя?
Записан
Professor
Осваиваюсь на форуме
***

Репутация: +8/-0
Offline Offline

Пол: Мужской
Сообщений: 67



« Ответ #161 : 18.07.2010, 22:08:37 »

Код
<?php
$user =& JFactory::getUser();
$userid = $user->get( "id", 0 );
?>
А дальше делаешь с id что хочешь
« Последнее редактирование: 19.07.2010, 23:28:46 от Professor » Записан
lunwer
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Женский
Сообщений: 46



« Ответ #162 : 20.07.2010, 17:01:10 »

Как прописать условие типо этого

Цитировать
$bodyclass = ' ';
if (чего то там) {
$bodyclass = 'dark';
} else {}

<div id="maincol<php echo $bodyclass; ?>">

только привязаться к id материала?
Записан
fedya
Завсегдатай
*****

Репутация: +50/-1
Offline Offline

Сообщений: 732


« Ответ #163 : 09.08.2010, 20:37:20 »

а как сделать вывод только на главной, в блоге исключая остальные страницы пагинации и используя стандартный SEF?
Записан
Lex
Тестеры
*****

Репутация: +246/-1
Online Online

Пол: Мужской
Сообщений: 1851


« Ответ #164 : 09.08.2010, 20:58:42 »

$start = JRequest::getInt('start',0);
if (!$start){
echo 'Первая';
}else{
echo 'Не первая';
}
Записан
SmokerMan
Профи
********

Репутация: +489/-19
Offline Offline

Пол: Мужской
Сообщений: 5078



« Ответ #165 : 09.08.2010, 21:00:14 »

а как сделать вывод только на главной, в блоге исключая остальные страницы пагинации и используя стандартный SEF?
а причем здесь SEF?
Код
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault() && !JRequest::getInt('limitstart') && JRequest::getWord('layout') == 'blog') { ?>
  <h1>ДРЯМС</h1>
<?php } ?>
 
Записан
fedya
Завсегдатай
*****

Репутация: +50/-1
Offline Offline

Сообщений: 732


« Ответ #166 : 10.08.2010, 11:36:04 »

спасибо, оба способа рабочие Azn
с маленькими оговорками...
в первом варианте
$start = JRequest::getInt('start',0);
if (!$start){
echo 'Первая';
}else{
echo 'Не первая';
}
в первой строке не $start = JRequest::getInt('start',0); а
 $start = JRequest::getInt('limitstart',0);

во втором варианте
Код
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault() && !JRequest::getInt('limitstart') && JRequest::getWord('layout') == 'blog') { ?>
  <h1>ДРЯМС</h1>
<?php } ?>
 
строка
&& JRequest::getWord('layout') == 'blog'
лишняя...

спасибо Azn
Записан
Arina
Давно я тут
****

Репутация: +1/-0
Offline Offline

Пол: Женский
Сообщений: 203


« Ответ #167 : 11.08.2010, 21:16:15 »

Как сделать, чтобы модуль выводился везде кроме главной, у меня главная страница начинается с блога-категории, код вставляю работает как нужно, но в других категориях модуль не работает

помогите модифицировать:

<?php if (! (JRequest::getCmd( 'view' ) == 'category')) { ?>
<div>
<td class="main"><jdoc:include type="modules" name="advert3" style="main" /></td>
</div>
<?php } ?>
Записан
Lex
Тестеры
*****

Репутация: +246/-1
Online Online

Пол: Мужской
Сообщений: 1851


« Ответ #168 : 11.08.2010, 21:24:49 »

Код
<?php $menu = & JSite::getMenu();
if ($menu->getActive()->id != $menu->getDefault()->id) { ?>
<div>
<td class="main"><jdoc:include type="modules" name="advert3" style="main" /></td>
</div>
<?php } ?>
Записан
Arina
Давно я тут
****

Репутация: +1/-0
Offline Offline

Пол: Женский
Сообщений: 203


« Ответ #169 : 11.08.2010, 21:33:01 »

Код
<?php $menu = & JSite::getMenu();
if ($menu->getActive()->id != $menu->getDefault()->id) { ?>
<div>
<td class="main"><jdoc:include type="modules" name="advert3" style="main" /></td>
</div>
<?php } ?>


не работает (
Записан
Lex
Тестеры
*****

Репутация: +246/-1
Online Online

Пол: Мужской
Сообщений: 1851


« Ответ #170 : 11.08.2010, 21:39:08 »

Код
<?php $menu = & JSite::getMenu();
if ($menu->getActive()->id != $menu->getDefault()->id) { ?>
<div>
<td class="main">Вай-Вай-Вай</td>
</div>
<?php } ?>
Записан
Arina
Давно я тут
****

Репутация: +1/-0
Offline Offline

Пол: Женский
Сообщений: 203


« Ответ #171 : 11.08.2010, 21:41:06 »

серьезно не работает, модуль выводится на advert3, сейчас обычным модулем его выводила пробывала.
выводила "вай-вай-ваем": <jdoc:include type="modules" name="advert3" style="main" />
Записан
Lex
Тестеры
*****

Репутация: +246/-1
Online Online

Пол: Мужской
Сообщений: 1851


« Ответ #172 : 11.08.2010, 21:43:19 »

Значит не судьба. Придется публиковать модуль только на главной стандартными средствами в настройках модуля.
Записан
Arina
Давно я тут
****

Репутация: +1/-0
Offline Offline

Пол: Женский
Сообщений: 203


« Ответ #173 : 11.08.2010, 21:43:51 »

нет, мне нужно наоборот, чтобы на главной не выводилось))
Записан
Lex
Тестеры
*****

Репутация: +246/-1
Online Online

Пол: Мужской
Сообщений: 1851


« Ответ #174 : 11.08.2010, 21:45:27 »

Аналогично.
Записан
Arina
Давно я тут
****

Репутация: +1/-0
Offline Offline

Пол: Женский
Сообщений: 203


« Ответ #175 : 11.08.2010, 21:46:28 »

а можно в этом коде обозначить номер раздела (категории) запрещающий к показу:

<?php if (! (JRequest::getCmd( 'view' ) == 'category')) { ?>
<div>
<td class="main"><jdoc:include type="modules" name="advert3" style="main" /></td>
</div>
<?php } ?>

этот работает, только в разделах не показывается
Записан
SmokerMan
Профи
********

Репутация: +489/-19
Offline Offline

Пол: Мужской
Сообщений: 5078



« Ответ #176 : 11.08.2010, 22:51:45 »

Код
<?php 
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault() && $menu->query['view'] != 'category') {
...
} ?>
 
Записан
infobody
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 77


заряжен


« Ответ #177 : 16.08.2010, 13:48:39 »

Народ пожалуйста помогите.
Я под вечер не соображаю что-то  -  как сделать на этом сайте http://www.priiskovy.ru/
что-бы при клике на заголовок новости, верхних модулей не было видно?
и вообще почему заголовок новости с itemid=1?
Записан
effrit
Группа развития
*****

Репутация: +515/-5
Offline Offline

Пол: Мужской
Сообщений: 5974


effrit.com


« Ответ #178 : 16.08.2010, 14:00:53 »

переделай третье условие из топика под свои нужды.
только у тебя будет там не com_content, а k2 и второй параметр другой
Записан
ZlyddeN
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 71


« Ответ #179 : 19.08.2010, 21:43:59 »

есть ли какое-нить решение, которое бы позволяло вот что:
1. в заданной позиции (например "LEFT-2") выводило содержимое модуля
2. а вот содержимое модуля зависело бы от ID статьи. Т.е. вело бы учет к какой статье привязано это содержимое

если делать самому, то я так полагаю это должно быть условие типа
Код
($view == 'article' && $id=_TARGET_ID_ )
?
причем
Код
$id = JRequest::getVar('id', null);
так? я правильно понял?
Записан
ZlyddeN
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 71


« Ответ #180 : 19.08.2010, 21:49:23 »

Цитировать
2. а вот содержимое модуля зависело бы от ID статьи. Т.е. вело бы учет к какой статье привязано это содержимое
точнее можно ли:
1. сделать привязку материала №1 к материалу №2
2. и при просмотре полной версии материала №2, а заданном модуле отображалось бы содержимое материала №1  Shocked
как то так Azn

UPD:
в принципе вроде подходит....
http://extensions.joomla.org/extensions/news-display/related-items/7789

UPD UPD:
подходит по части создания ссылок Azn
вопрос по "похожему" содержимому открыт
« Последнее редактирование: 19.08.2010, 23:32:37 от ZlyddeN » Записан
Страниц: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet