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

Войти
   
   Начало   Поиск Joomla 2.5 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 16 17 18 19   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Различные условия в шаблонах Joomla 1.5  (Прочитано 152498 раз)
Argawa и 1 Гость смотрят эту тему.
beliyadm
Профи
********

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

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


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


« : 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 » Записан
 
bozhkov
Осваиваюсь на форуме
***

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

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



« Ответ #121 : 21.05.2010, 16:19:41 »

Вах, спасибо, дарагой! Azn  Все работает!
Записан
Mitrich
Администратор
*******

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

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


Все можно. Но сначала учиться, учиться и учиться.


« Ответ #122 : 25.05.2010, 14:36:02 »

Товарищи Nibiru и effrit
Взаимное кидание минусами не красит ни одного из вас.

Минусы в результирующей репутации убираю.
Nibiru - тебе бан с доступом только на чтение на неделю.
Записан
effrit
Группа развития
*****

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

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


effrit.com


« Ответ #123 : 25.05.2010, 14:48:55 »

согласен, но просто так получать минусы я категорически не люблю Azn
Записан
Mitrich
Администратор
*******

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

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


Все можно. Но сначала учиться, учиться и учиться.


« Ответ #124 : 25.05.2010, 14:49:22 »

Закрыли вопрос
Записан
gDenisk
Осваиваюсь на форуме
***

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

Сообщений: 79



« Ответ #125 : 31.05.2010, 02:09:43 »

Код:
<?php $menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault()) { ?>
<?php if($this->countModules('user6')) : ?>
 <div id="vmMainPage"> <jdoc:include type="modules" name="user6" / ><jdoc:include type="component" />
<?php endif; ?>
<?php } else { ?>
<div id="vmMainPage"> <jdoc:include type="component" />
<?php } ?>

вот такой код и тем не менее отображается на главной странице и на странице категорий магазина VirtueMart.
Записан
gDenisk
Осваиваюсь на форуме
***

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

Сообщений: 79



« Ответ #126 : 31.05.2010, 02:58:51 »

Я имею в виду условие проверки - главная или нет.

Еще вот такое условие проверки есть, но и оно не работает!
Ахтунг, что делать?

Код:
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault()) {
   echo 'This is the front page';
}
Записан
gDenisk
Осваиваюсь на форуме
***

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

Сообщений: 79



« Ответ #127 : 31.05.2010, 02:59:29 »

т.е. это он и есть, но не отображается! не работает код.
Записан
stratosfera
Захожу иногда
**

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

Сообщений: 10


« Ответ #128 : 03.06.2010, 14:41:32 »

Помогите советом!
У меня  установлен шаблон, где в шапке шаблона есть одна статичная картинка, которая отображается  на всех страницах сайта.
А мне нужно сделать так, что бы в определенных пунктах меню сайта, в шапке шаблона отображались разные картинки, например 5 разных изображений, которые будут привязаны к пяти определенным пунктам меню. В стандартных настройках публикаций модулей в Joomla есть еще похожая функция назначения на определенные пункты меню. Только мне это нужно реализовать на уровне шаблона, а я не знаю как.
« Последнее редактирование: 03.06.2010, 14:52:25 от stratosfera » Записан
b2z
Support Team
*****

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

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


Contra Gaming Community


« Ответ #129 : 03.06.2010, 15:20:34 »

Привязываемся к Itemid.

Называем картинки к примеру picture-номерItemid и в зависимости от Itemid будет подключаться картинка:

Код:
$Itemid = JRequest::getInt( 'Itemid', 1, 'get' );
<div id="header" style="background: url('../images/picture-<?php echo $Itemid ;?>.jpg')">
</div>

Не забудьте только одну из картинок в данном случае назвать как picture-1 и она будет по умолчанию подключаться в случае отсутствия Itemid.

Надеюсь идея понятна.
Записан
stratosfera
Захожу иногда
**

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

Сообщений: 10


« Ответ #130 : 03.06.2010, 16:47:14 »

Привязываемся к Itemid.

Называем картинки к примеру picture-номерItemid и в зависимости от Itemid будет подключаться картинка:

Код:
$Itemid = JRequest::getInt( 'Itemid', 1, 'get' );
<div id="header" style="background: url('../images/picture-<?php echo $Itemid ;?>.jpg')">
</div>

Не забудьте только одну из картинок в данном случае назвать как picture-1 и она будет по умолчанию подключаться в случае отсутствия Itemid.

Надеюсь идея понятна.

Идея понятна, но у меня очень мало опыта в этом. Может на примере поможете? Вот часть кода из файла шаблона index.php в котором упоминается картинка в шапке шаблона.

Код:
<!--BEGINN TOP SECTION -->
<div id="top_section" class="clr">
<div id="logo">
  <div align="center"><a href="<?php echo $this->baseurl ?>" class="thetip" title="<?php echo $this->params->get('ToolTipLogo'); ?>"><img src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/images/logo.png" alt="<?php echo $siteName; ?>" border="0" /></a></div>
</div>
Картинка, которая всегда в шапке шаблона: logo.png

и в CSS файле есть такая строчка:
Код:
}
#logo{
float:center;
padding-bottom:10px;
}
« Последнее редактирование: 03.06.2010, 17:24:01 от stratosfera » Записан
b2z
Support Team
*****

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

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


Contra Gaming Community


« Ответ #131 : 03.06.2010, 18:43:53 »

Ну в CSS ничего менять не надо. А index.php:

Цитировать
<?php $Itemid = JRequest::getInt( 'Itemid', 1, 'get' ); ?>

<!--BEGINN TOP SECTION -->
<div id="top_section" class="clr">
<div id="logo">
  <div align="center"><a href="<?php echo $this->baseurl ?>" class="thetip" title="<?php echo $this->params->get('ToolTipLogo'); ?>"><img src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/images/logo-<?php echo $Itemid ;?>.png" alt="<?php echo $siteName; ?>" border="0" /></a></div>
</div>

Соответственно лого Ваши должны называться как logo-номерItemid.png
Записан
stratosfera
Захожу иногда
**

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

Сообщений: 10


« Ответ #132 : 03.06.2010, 20:11:52 »

Ну в CSS ничего менять не надо. А index.php:

Соответственно лого Ваши должны называться как logo-номерItemid.png
Огромное Вам спасибо! Все работает )
Записан
Alex_kor
Осваиваюсь на форуме
***

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

Сообщений: 25


« Ответ #133 : 09.06.2010, 01:53:53 »

Дело в том, что у меня проблема: на странице контент идёт в 2 столбца, причём один из них модуль mod_content_listing. Во втором выводятся материалы категорий.
Если в первом столбце у меня были статьи категории, то при просмотре материала целиком я сделал, чтобы он выводился на всю ширину области контента. Но во втором столбце (там у меня модуль mod_content_listing) находятся логотипы, скажем 3 столбца в 5 строк. И та же ситуация, только здесь не ссылка "подробнее...", а лого как ссылка на описание компании и это также должно быть на ширину области контента. Здесь как с первым столбцом не прокатит по ходу...
Записан
biohan
Осваиваюсь на форуме
***

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

Сообщений: 58


« Ответ #134 : 09.06.2010, 15:02:23 »

как  будет выглядеть условие - если есть такойто модуль,убрать <jdoc:include type="component" /> ?
Записан
MuraDweb
Support Team
*****

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

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


« Ответ #135 : 09.06.2010, 15:17:27 »

Код
 <?php if(!$this->countModules('kakoito')) { ?>
<jdoc:include type="component" />
<?php } ?>
 
Записан
rvb
Захожу иногда
**

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

Сообщений: 11


« Ответ #136 : 14.06.2010, 19:24:00 »

Вот так:
Код
<?php
$user = &JFactory::getUser();
 
if ($user->quest): ?>
<jdoc:include type="modules" name="top_menu_non_login" />
<?php else: ?>
<jdoc:include type="modules" name="top_menu_login" />
<?php endif; ?>
 


Не могу понять где нужно вставлять этот код. Я так понимаю в index.php шаблона. Но в каком месте ?
Записан
effrit
Группа развития
*****

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

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


effrit.com


« Ответ #137 : 14.06.2010, 19:30:27 »

в месте вызова позиций для модулей.
если ты правишь готовый шаблон, то ищи строки с нужной тебе позицией (т.е той, рядом с которой ты хочешь свои воткнуть)
<jdoc:include type="modules" name="тут позиция перед/после которой хотим свои добавить" />


ну и рядышком (выше или ниже) ставь свои условия для вывода позиций.
Записан
rvb
Захожу иногда
**

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

Сообщений: 11


« Ответ #138 : 15.06.2010, 07:13:42 »

в месте вызова позиций для модулей.
если ты правишь готовый шаблон, то ищи строки с нужной тебе позицией (т.е той, рядом с которой ты хочешь свои воткнуть)
<jdoc:include type="modules" name="тут позиция перед/после которой хотим свои добавить" />


ну и рядышком (выше или ниже) ставь свои условия для вывода позиций.

Спасибо за подсказку. Вроде нашел нужную строку где вставлять код:
Код:
<?php
$user = &JFactory::getUser();
if ($user->guest): ?>
<jdoc:include type="modules" name="top_menu_non_login" />
    <? if (artxCountModules($document, 'left')) : ?>
<div class="art-sidebar1"><?php echo artxModules($document, 'left', 'art-block'); ?>
</div><?php endif; ?>
<?php else: ?>
<jdoc:include type="modules" name="top_menu_login" />
    <? if (artxCountModules($document, 'left')) : ?>
<div class="art-sidebar1"><?php echo artxModules($document, 'left', 'art-block'); ?>
</div><?php endif; ?>
<?php endif; ?>
но видимо , опять что-то упустил, не получилось.
Записан
effrit
Группа развития
*****

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

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


effrit.com


« Ответ #139 : 15.06.2010, 07:29:16 »

помимо добавления в шаблон надо прописывать в
templateDetail.xml название добавленных позиций
Записан
Alex_kor
Осваиваюсь на форуме
***

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

Сообщений: 25


« Ответ #140 : 15.06.2010, 21:24:59 »

как программно индентифицировать режим просмотра полного текста НЕКАТЕГОРИЗИРОВАННОГО материала?
Записан
effrit
Группа развития
*****

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

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


effrit.com


« Ответ #141 : 15.06.2010, 22:52:10 »

а какая разница, в категории или нет.
<?php if (($option == 'com_content') && ($view == 'article')) { ?>
Записан
Alex_kor
Осваиваюсь на форуме
***

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

Сообщений: 25


« Ответ #142 : 15.06.2010, 23:24:28 »

мне нужно следующее:
 если материал выводится как шаблон блога категории со вступительным текстом, то надо его выводить не на всю ширину области контента, т.к. будет отображаться ещё один модуль, а при полном просмотре  - статьи выводятся на всю ширину области контента. В то же время есть ситуация, когда при выводе полного материала статьи(некатегоризированной) нужно отображать ещё и другой модуль. Вот я и хочу проверить, что если article есть некатегор., то доп. модуль отображать, а если article  - это полный текст категор. материала, то скрывать
Записан
PashkaRu
JComments Tester
*

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

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


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


« Ответ #143 : 16.06.2010, 00:47:59 »

проверку первую оставляешь.
всю обвязку модуля лучше сделать в шаблон/html/modules.php

В index.php вставляется первое твое условие, но без _внешней_ обвязки. Т.е. все дивы, обрамляющие модуль, должны быть видны только когда модуль включен.... хотя... если все это в условии находится, то не важно.

Далее в делаешь пункт меню с этой страницей, которая без категории (доп. меню, которое нигде не видно... ну, если не нмдо, чтобы оно было видно) и в настройках модуля в админке указываешь, что модуль надо показывать в этом пункте меню.

В общем идея такая... ну а если там разные модули используются, то... повторяю - идя такая : ) комбинировать условие в index.php с  админкой.

Ну или тоже в индекс.пхп сделать показ модуля при опредленном itemid. А эти условия опять же прописаны вверху этого топика : )
Записан
rvb
Захожу иногда
**

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

Сообщений: 11


« Ответ #144 : 16.06.2010, 13:34:16 »

помимо добавления в шаблон надо прописывать в
templateDetail.xml название добавленных позиций
а как описать добавленные позиции ?
Записан
effrit
Группа развития
*****

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

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


effrit.com


« Ответ #145 : 16.06.2010, 13:37:32 »

ну это
открой файл и включи мозг Azn
если не догадаешься, то закрой файл и сотри Joomla Azn
Записан
rvb
Захожу иногда
**

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

Сообщений: 11


« Ответ #146 : 17.06.2010, 19:00:15 »

ну это
открой файл и включи мозг Azn
если не догадаешься, то закрой файл и сотри Joomla Azn
спасибо за помощь, ты добрый
Записан
PashkaRu
JComments Tester
*

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

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


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


« Ответ #147 : 17.06.2010, 19:39:42 »

 : ))) там спасибо за какую строчку? вторая или третья? : )))
Записан
effrit
Группа развития
*****

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

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


effrit.com


« Ответ #148 : 17.06.2010, 21:35:48 »

за комплексное решение Azn
rvb, просто надо до задавания вопроса самому пытаться что-то сделать, тем более что там интуитивно понятно, достаточно просто открыть файл (на который было указано) и посмотреть было.
+ещё есть поиск по форуму и FAQ в которых всё это есть.
ну реально высаживает, что совсем не хотят думать люди. ощущение, что надо писать на каком-то детском алгоритмическом языке программу для человекороботов

REM *** суперпрограмма для не желающих думать ***

открыть тоталкоммандер
выбрать файл templateDetails.xml
нажать F4
найти секцию <positions>
вписать свою позицию
сохранить файл
закрыть окно редактора
поздравить себя с выполнением задачи без использования мозга
отключиться

*** конец суперпрограммы ***

ну конечно, я излишне желчен. но в чём я не прав? Azn
Записан
Lex
Тестеры
*****

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

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


« Ответ #149 : 17.06.2010, 21:38:07 »

вписать свою позицию
А как вписать  Shocked  Cry
Записан
PashkaRu
JComments Tester
*

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

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


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


« Ответ #150 : 17.06.2010, 21:41:32 »

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

а название сейчас (я че-то даже не заметил, разве так было всегда? или с какой-то версии?) можно прописать прямо в настройках модуля. Там же где позиция указывается, там ее можно просто ВПИСАТЬ : )
Записан
Страниц: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.18 | 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