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

Войти
   
   Начало   Поиск 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  (Прочитано 152027 раз)
0 Пользователей и 1 Гость смотрят эту тему.
beliyadm
Профи
********

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

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


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


« : 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 » Записан
 
SSStylish
Давно я тут
****

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

Сообщений: 213


« Ответ #211 : 24.09.2010, 20:25:39 »

Как устроить проверку на админку (по типу п.7 из шапки проверки на главную страницу)?
Записан
igoryk
Давно я тут
****

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

Сообщений: 201


« Ответ #212 : 26.09.2010, 02:48:48 »

Кто подскажет какое условие нужно прописать, чтобы левый блок отображался абсолютно везде, кроме VirtueMart ?
Ну очень надо.... Я уже голову сломал...
Записан
danik.html
Практически профи
*******

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

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



« Ответ #213 : 26.09.2010, 02:52:09 »

igoryk, не надо ломать голову, надо читать инфу, старательно написанную beliyadm'ом.
В первых же 5 строчках есть то что тебе нужно. имя вирта - com_virtuemart
Записан
SSStylish
Давно я тут
****

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

Сообщений: 213


« Ответ #214 : 26.09.2010, 03:08:35 »

Кто подскажет какое условие нужно прописать, чтобы левый блок отображался абсолютно везде, кроме VirtueMart ?
Ну очень надо.... Я уже голову сломал...

В index.php шаблона добавь:
Код:
<?php $option = JRequest::getVar('option', null);
  if ($option == 'com_virtuemart') { ?>
// тут все что отображается в virtuemart
<?php }
else {?>
// тут все что в VirtueMart не отображается
}
Записан
igoryk
Давно я тут
****

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

Сообщений: 201


« Ответ #215 : 27.09.2010, 01:37:55 »

В index.php шаблона добавь:
Код:
<?php $option = JRequest::getVar('option', null);
  if ($option == 'com_virtuemart') { ?>
// тут все что отображается в virtuemart
<?php }
else {?>
// тут все что в VirtueMart не отображается
}
Огромнное спасибо! Все получилось, правда пришлось чуть подправить вот так код -

Код:
<?php $option = JRequest::getVar('option', null);
  if ($option == 'com_virtuemart') { ?>
// тут все что отображается в virtuemart
<?php } else { ?>
// тут все что в VirtueMart не отображается
<?php } ?>
Записан
SSStylish
Давно я тут
****

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

Сообщений: 213


« Ответ #216 : 27.09.2010, 04:39:28 »

Огромнное спасибо! Все получилось, правда пришлось чуть подправить вот так код -
Все верно, чутка схалтурил перед сном Wink
Записан
SSStylish
Давно я тут
****

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

Сообщений: 213


« Ответ #217 : 27.09.2010, 04:47:14 »

в /libraries/joomla/document/html/renderer/head.php меняю:

Код:
$strHtml .= $tab.'<title>'.htmlspecialchars($document->getTitle()).'</title>'.$lnEnd;
на:
Код:
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault()) {
$strHtml .= $tab.'<title>постоянный титл на главной</title>'.$lnEnd;
} else {
$strHtml .= $tab.'<title>'.htmlspecialchars($document->getTitle()).'</title>'.$lnEnd;
}
Все работает до момента захода в админку. Там начинается ругань что класс JSite не описан.
Как организовать проверку на админку?
Записан
danik.html
Практически профи
*******

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

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



« Ответ #218 : 27.09.2010, 05:03:27 »

А зачем ты лезешь в тот файл? низя, по рукам, по рукам !
меняй тайтл в шаблоне своем, кто тебе мешает.
Записан
userxp
Администратор
*******

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

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


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


« Ответ #219 : 27.09.2010, 12:59:14 »

Там начинается ругань что класс JSite не описан.
естественно. ибо нет его там Azn

$check = JFactory::getApplication()->isAdmin();
Записан
SSStylish
Давно я тут
****

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

Сообщений: 213


« Ответ #220 : 27.09.2010, 21:22:49 »

естественно. ибо нет его там Azn
Я вижу что нет )))
Спасибо тебе, сделал вот так:
Код:
$check =& JFactory::getApplication();
if ($check->isAdmin()) {
// Это на админке
$strHtml .= $tab.'<title>'.htmlspecialchars($document->getTitle()).'</title>'.$lnEnd;
} else {
// Проверка на главную страницу
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault()) {
// Это на главной
$strHtml .= $tab.'<title>Постоянный титл на главной - site.ru</title>'.$lnEnd;
} else {
// Это не на главной.
$strHtml .= $tab.'<title>'.htmlspecialchars($document->getTitle()).' - site.ru</title>'.$lnEnd;
}
}
Записан
danik.html
Практически профи
*******

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

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



« Ответ #221 : 28.09.2010, 03:39:49 »

А к чему эти сложности, не мог бы объяснить? Ведь установить тайтл можно и в шаблоне, это даже проще ($this-setTitle())
Записан
SSStylish
Давно я тут
****

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

Сообщений: 213


« Ответ #222 : 28.09.2010, 06:47:28 »

А к чему эти сложности, не мог бы объяснить? Ведь установить тайтл можно и в шаблоне, это даже проще ($this-setTitle())
Не вдаваясь в детали реализации, скажу, что для меня это было единственным выходом Wink
Записан
danik.html
Практически профи
*******

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

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



« Ответ #223 : 28.09.2010, 06:51:27 »

зашифрованный шаблон? ))
Записан
trk
Осваиваюсь на форуме
***

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

Сообщений: 87


« Ответ #224 : 04.10.2010, 14:01:02 »

Подскажите как сделать чтобы блок (именно блок) не отображался на главной странице

Код:
<?php if ($Itemid != '1') { ?>
<div ...> ... </div>
<?php } else { } ?>

или

Код:
<?php if ($Itemid != '1'):  ?>
<div ...> ... </div>
<?php endif; ?>


Не срабатывает. Блок показывает кругом.
Подскажите как сделать правильно?
« Последнее редактирование: 04.10.2010, 14:05:03 от trk » Записан
danik.html
Практически профи
*******

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

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



« Ответ #225 : 04.10.2010, 14:04:51 »

7 – универсальный способ проверки на главную страницу
Код
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault()) {
// на главной
} else {
// тут всё что не на главной
}

Слепые котята, ну ейбогу...Надо всегда мордочкой тыкать...
Записан
trk
Осваиваюсь на форуме
***

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

Сообщений: 87


« Ответ #226 : 04.10.2010, 14:06:54 »

Видел!
Но как прикрутить в код это условие не пойму (вылетает ошибка).
 Smiley

Как правильно написать код чтобы условие работало для <div ...> ... </div>
Записан
beliyadm
Профи
********

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

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


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


« Ответ #227 : 04.10.2010, 14:25:42 »

Код
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault()) {
?>
<div>на главной</div>
<?php
} else {
?>
<div>тут всё что не на главной</div>
<?php
}
Записан
trk
Осваиваюсь на форуме
***

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

Сообщений: 87


« Ответ #228 : 04.10.2010, 15:24:13 »

Подскажите как это условие вставить на отмеченный ===== ====== фрагмент кода (код рабочий)
а то как не вставлю - все никак не получается - выбивает ошибку


Код:
<?php if($this->countModules('col1')) : ?>
      <div id="jv-col1" class="jv-user jv-box<?php echo $botsl1['col1']['class']; ?>">
<div class="jv-box-inside">
<jdoc:include type="modules" name="col1" style="jvxhtml" />
</div>
======================================================================
                    <div id="jv-left-content">
                               <div id="jv-content">
                                                                <div id="jv-content-inner">
                                                                        <div id="jv-component" class="clearfix">
                                                                                <jdoc:include type="message" />
                                                                                <jdoc:include type="component" />
                                                                        </div>
                                                                </div>
                               </div>
                    </div>
======================================================================

</div>
<?php endif; ?>
Записан
THE KILLERS
Живу я здесь
******

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

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



« Ответ #229 : 05.10.2010, 09:38:17 »

Подскажите как вывести модуль в позиции контента? Я создал новую позицию для модуля, теперь надо как-то вывести эту позицию в позицию контента.
« Последнее редактирование: 05.10.2010, 10:39:39 от THE KILLERS » Записан
Lex
Тестеры
*****

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

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


« Ответ #230 : 05.10.2010, 13:18:23 »

стандартный плагин Content - Load Module
Записан
THE KILLERS
Живу я здесь
******

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

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



« Ответ #231 : 05.10.2010, 17:25:22 »

Я как раз им пользуюсь. Но он вроде как выводит только если прописать {loadposition название_позиции} в статье и вывести эту статью на главную. А мне надо чтобы он выводился не в статье, а в шаблоне.
Записан
PashkaRu
JComments Tester
*

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

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


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


« Ответ #232 : 05.10.2010, 18:51:01 »

ну таки надо прописать модуль в шаблоне... что-то я не пойму вопроса...
Записан
Kuzmitch
Осваиваюсь на форуме
***

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

Сообщений: 146



« Ответ #233 : 07.10.2010, 00:08:59 »

Нужна помощь.
Не получается управлять модулями в зависимости от страницы.

Нужно чтобы в блоге компонента K2 отображался блок "right"
вот ссылка: http://demo22.asaweb.ru/index.php?option=com_k2&view=itemlist&layout=category&task=category&id=5&Itemid=36
А на странице материала K2 блока "right" не было.

Пишу значит код, но что-то блок пропадает и вблоге и в статье.
Может что-то не так делаю ? Кто что подскажет ?
 
Код:
<?php if (($option == 'com_k2') && ($view == 'itemlist')) { ?>
<div class="column w33 no-margin-right">
<jdoc:include type="modules" name="right" style="xhtml" />
</div>
<?php } else {} ?>

Спасибо с ув. Дмитрий!
Записан
Lex
Тестеры
*****

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

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


« Ответ #234 : 07.10.2010, 00:16:05 »

А где инициализация $option и $view. Ну $option может уже присутствовать, а $view то откуда взялось.
Записан
Kuzmitch
Осваиваюсь на форуме
***

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

Сообщений: 146



« Ответ #235 : 07.10.2010, 00:21:05 »

А где инициализация $option и $view. Ну $option может уже присутствовать, а $view то откуда взялось.

Подскажи пожалуйста как инициализировать "$option и $view" я в php не очень силен (
Записан
Lex
Тестеры
*****

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

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


« Ответ #236 : 07.10.2010, 00:23:20 »

Цитировать
Для начала рассмотрим получение необходимых параметров, которые в Joomla 1.0 было достаточно объявить как глобальные
$Itemid = JRequest::getInt( 'Itemid', 1, 'get' ); //получем текущий ItemID, если не определен – то по умолчанию будет 1
$option = JRequest::getVar('option', null); // получаем название текущего компонента, в нашем случае будет com_content либо NULL
$view = JRequest::getVar('view', null); // получаем значение текущей вьюшки
Записан
vovchikku
Давно я тут
****

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

Сообщений: 330


« Ответ #237 : 16.10.2010, 22:58:02 »

помогите сформулировать простое условие: если материал относится к определенной категории (id категории), то (в этом месте) должен высвечиваться вот этот модуль (id модуля). или ткните к пример из этой ветки.... ато после 3- страницы чтения вариантов кодов я окончательно потерялся...
еще проблема осложнена тем, что стоит Artio JoomSEF и как получить idcat непонятно...

спасибо заранее гуру


« Последнее редактирование: 16.10.2010, 23:12:17 от vovchikku » Записан
SmokerMan
Профи
********

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

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



« Ответ #238 : 17.10.2010, 03:27:45 »

vovchikku тоже случайно наткнулся, может поможет.
http://joomlaforum.ru/index.php/topic,132312.0.html
Записан
vovchikku
Давно я тут
****

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

Сообщений: 330


« Ответ #239 : 18.10.2010, 10:39:02 »

спасибо, посмотрю!
Записан
IvanSmirnov
Осваиваюсь на форуме
***

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

Сообщений: 61


« Ответ #240 : 21.10.2010, 19:44:31 »

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

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

А как сделать, если мне нужны разные картинки только на отдельные меню, а не на все.

Например, если я кликаю на ItemID=8, а картинки 8.jpg у меня, то чтобы он загружал картинку 0.jpg ?

Спасибо!
Записан
Страниц: 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