29 августа 2009
Хитрости в шаблонах Joomla 1.5. Часть 1: Про позиции модулей
Я начинаю цикл статей, в которых буду рассказывать об реализации интересных задач как тривиальный так и не очень в шаблонах для Joomla 1.5. Оформление статьи будет в виде FAQ'а: чтобы вам мало читать, а мне мало писать. Очень буду стараться переходить от простого к сложному.
Итак, приступим:
1) Как скрыть позицию модуля если в ней нет активных модулей?
1.1) А если позиций несколько?
2) Как отобразить позицию только для авторизованного пользователя?
2.1) А наоборот, только для гостя?
2.2) Хорошо, а если я хочу вывести позицию для определённой группы, например для «Author»?
2.3) Замучал уже наверное, ну а всё же, а как для конкретного пользователя вывести, например для пользователя с ником «qwerty»?
2.4) Эх, ну а логин пользователя как вывести:
3) Как отобразить позицию в определённом компоненте, например в компоненте «Контакты»?
3.1) Ну а как вывести позицию при определённом Itemid, например «35»?
3.2) А как показать позицию только на банальной «Главной» сайта?
Или же более универсальное решение (определяет пункт меню, у которого стоит метка «По умолчанию»):
Следует заметить, что все используемые параметры типа:
нужно писать вначале index.php но не перед:
и только один раз, а вот данные этих параметров использовать столько сколько нужно.
Пока что всё. По мере накопления знаний данная статья будет дополнятся.
Хитрости в шаблонах Joomla 1.5. Часть 2: Про оформление модулей
Хитрости в шаблонах Joomla 1.5. Часть 3: Всякого рода полезности
Итак, приступим:
1) Как скрыть позицию модуля если в ней нет активных модулей?
<?php if($this->countModules('user1') : ?>
<div id="user1">
<jdoc:include type="modules" name="user1" style="xhtml" />
</div>
<?php endif ?>
1.1) А если позиций несколько?
<?php if($this->countModules('user1 or user2 or user3') : ?>
<div id="users">
<?php if($this->countModules('user1') : ?>
<div id="user1">
<jdoc:include type="modules" name="user1" style="xhtml" />
</div>
<?php endif ?>
<?php if($this->countModules('user2') : ?>
<div id="user2">
<jdoc:include type="modules" name="user2" style="xhtml" />
</div>
<?php endif ?>
<?php if($this->countModules('user3') : ?>
<div id="user3">
<jdoc:include type="modules" name="user3" style="xhtml" />
</div>
<?php endif ?>
</div>
<?php endif ?>
2) Как отобразить позицию только для авторизованного пользователя?
<?php
$user =& JFactory::getUser();
?>
<?php if(!$user->guest) : ?>
<div id="user1">
<jdoc:include type="modules" name="user1" style="xhtml" />
</div>
<?php endif ?>
2.1) А наоборот, только для гостя?
<?php
$user =& JFactory::getUser();
?>
<?php if($user->guest) : ?>
<div id="user1">
<jdoc:include type="modules" name="user1" style="xhtml" />
</div>
<?php endif ?>
2.2) Хорошо, а если я хочу вывести позицию для определённой группы, например для «Author»?
<?php
$user =& JFactory::getUser();
?>
<?php if($user->get('usertype') == 'Author') : ?>
<div id="user1">
<jdoc:include type="modules" name="user1" style="xhtml" />
</div>
<?php endif ?>
2.3) Замучал уже наверное, ну а всё же, а как для конкретного пользователя вывести, например для пользователя с ником «qwerty»?
<?php
$user =& JFactory::getUser( 'qwerty' );
?>
<?php if($user->id) : ?>
<div id="user1">
<jdoc:include type="modules" name="user1" style="xhtml" />
</div>
<?php endif ?>
2.4) Эх, ну а логин пользователя как вывести:
<?php
$user =& JFactory::getUser();
?>
<?php if($user->id) : ?>
<div id="user1">
<?php echo $user->get('username') ?>
</div>
<?php endif ?>
3) Как отобразить позицию в определённом компоненте, например в компоненте «Контакты»?
<?php
$option = JRequest::getVar( 'option' );
?>
<?php if($option == 'com_contact') : ?>
<div id="user1">
<jdoc:include type="modules" name="user1" style="xhtml" />
</div>
<?php endif ?>
3.1) Ну а как вывести позицию при определённом Itemid, например «35»?
<?php
$itemid = JRequest::getInt( 'Itemid' );
?>
<?php if($itemid == '35') : ?>
<div id="user1">
<jdoc:include type="modules" name="user1" style="xhtml" />
</div>
<?php endif ?>
3.2) А как показать позицию только на банальной «Главной» сайта?
<?php
$option = JRequest::getVar( 'option' );
$id = JRequest::getInt( 'id' );
?>
<?php if($option == 'com_content' && !$id) : ?>
<div id="user1">
<jdoc:include type="modules" name="user1" style="xhtml" />
</div>
<?php endif ?>
Или же более универсальное решение (определяет пункт меню, у которого стоит метка «По умолчанию»):
<?php
$menu =& JSite::getMenu();
?>
<?php if ($menu->getActive() == $menu->getDefault()) : ?>
<div id="user1">
<jdoc:include type="modules" name="user1" style="xhtml" />
</div>
<?php endif ?>
Следует заметить, что все используемые параметры типа:
$menu =& JSite::getMenu();
$user =& JFactory::getUser();
$option = JRequest::getVar( 'option' );
$itemid = JRequest::getInt( 'Itemid' );
нужно писать вначале index.php но не перед:
defined( '_JEXEC' ) or die( 'Restricted access' );
и только один раз, а вот данные этих параметров использовать столько сколько нужно.
Пока что всё. По мере накопления знаний данная статья будет дополнятся.
Хитрости в шаблонах Joomla 1.5. Часть 2: Про оформление модулей
Хитрости в шаблонах Joomla 1.5. Часть 3: Всякого рода полезности
- pedrosoft
- 29 августа 2009, 21:13
- 0
времени потестить не было так что если что пишите, будем вместе разбираться
- Polosat
- 04 сентября 2009, 01:09
- 0
Напишите наглядную статью по превращению дизайна из фотошопа в нормальный шаблон джумла, очень было бы интересно увидеть практический пример и последовать самостоятельно. Пора бы с варезными шаблонами заканчивать =)
- Flashton
- 31 августа 2010, 11:03
- 0
Здравствуйте. У меня возникла проблема с использованием countModules в Joomla 1.5.
Мой шаблон сделан на основе блочной вёрстки, css и html код ниже.
Для скрытия блоков использую следующий код:
Код работает коряво в двух последних ситуациях, почему-то не отображаются границы указанные в css. Пожалуйста, помогите исправить.
HTML:
CSS:
С уважением, Антон
Мой шаблон сделан на основе блочной вёрстки, css и html код ниже.
Для скрытия блоков использую следующий код:
<?php
if($this->countModules('left and right') == 0) $contentwidth = "100";
if($this->countModules('left and right') == 1) $contentwidth = "60";
if($this->countModules("left") == false && $this->countModules( "right" ) == true) $contentwidth = "80_r";
if($this->countModules("left") == true && $this->countModules( "right" ) == false) $contentwidth = "80_l";
?>
Код работает коряво в двух последних ситуациях, почему-то не отображаются границы указанные в css. Пожалуйста, помогите исправить.
HTML:
/**---- Это кусок кода отвечающий за ширину ----**/
<?php if($this->countModules('left')) : ?><div id="left_b">
<jdoc:include type="modules" name="left" style="xhtml" />
</div>
<?php endif; ?>
<?php if($this->countModules('right')) : ?><div id="right_b">
<jdoc:include type="modules" name="right" style="xhtml" />
</div>
<?php endif; ?>
<div id="content<?php echo $contentwidth; ?>">
<jdoc:include type="component" style="xhtml" />
</div>
<div id="stop"></div>
CSS:
/**---- Это кусок кода отвечающий за ширину ----**/
#content60
{
height:auto;
margin-left:240px; /** **/
margin-right:240px;
padding:4px 8px 4px 8px;
border-left:dashed 4px #EBEBEB;
border-right:dashed 4px #EBEBEB;
}
#content80_l
{
height:auto;
margin-left:240px; /** **/
margin-right:20px;
padding:4px 8px 4px 8px;
border-left:dashed 4px #EBEBEB;
border-right:dashed 4px #EBEBEB;
}
#content80_r
{
height:auto;
margin-left:20px; /** **/
margin-right:240px;
padding:4px 8px 4px 8px;
border-left:dashed 4px #EBEBEB;
border-right:dashed 4px #EBEBEB;
}
#content100
{
height:auto;
margin-left:20px; /** **/
margin-right:20px;
padding:4px 8px 4px 8px;
border-left:dashed 4px #EBEBEB;
border-right:dashed 4px #EBEBEB;
}
С уважением, Антон
- pedrosoft
- 31 августа 2010, 20:00
- 0
Не работает именно код или что-то неправильно в цсс? Код вроде в порядке.
- Flashton
- 31 августа 2010, 20:07
- 0
Наверное код. Границы пропадают когда используются стили «content80_l» и «content80_r». При том, это явление, с пропаданием границ, возникает только на хостинге, на Денвере всё нормально.
В чём дело, понять не могу, вроде всё что могло глючить я уже пересмотрел.
С уважением, Антон
В чём дело, понять не могу, вроде всё что могло глючить я уже пересмотрел.
С уважением, Антон
- sssssss
- 03 мая 2011, 19:09
- 0
Использую компонент Jumi который выводит в статью любой код. Так вот, как сделать чтобы все что находиться в DIV-е Например текст
<div>Text!</div>
выводился только гостям или только автору?- pedrosoft
- 03 мая 2011, 19:44
- 0
так просто никак, нужно создавать дополнительный параметр в Jumi, так что либо за деньги либо ждать когда кто то это сделает :)
- sssssss
- 03 мая 2011, 19:58
- 0
Кое как нашел решение этим extensions.joomla.org/extensions/access-a-security/content-restriction/6004
Еще такой вот вопрос, как скрыть позицию модуля от Автора и выше, что бы показывалось только гостям и зарегистрированным пользователям?
Еще такой вот вопрос, как скрыть позицию модуля от Автора и выше, что бы показывалось только гостям и зарегистрированным пользователям?
- cheezer
- 18 ноября 2012, 21:24
- 0
Вопрос: как вывести модуль там где есть «Мета-тег Keywords»? Может кто знает?
- se95
- 27 марта 2014, 18:04
- 0
На главной странице расположены анонсы самых свежих статей со сылкой «читать далее». Ну, то есть вводный текст статей.
А также на главной есть стандартный модуль, причем в его настройках я выбрал показывать только на главной странице. Проблема в том, что если на главной странице нажать на любую из ссылок «читать далее», то откроется полный текст статьи, а модуль останется. Хотя по идее он должен исчезнуть. То есть, Joomla продолжает считать, что юзер находится на главной странице.
Если же открыть этот материал обычным макаром — через меню — то модуль исчезает (как и положено).
Вопрос: как заставить Joomla при нажатии на ссылку «читать далее» убирать все модули, которые не должны публиковаться нигде, кроме главной страницы?
А также на главной есть стандартный модуль, причем в его настройках я выбрал показывать только на главной странице. Проблема в том, что если на главной странице нажать на любую из ссылок «читать далее», то откроется полный текст статьи, а модуль останется. Хотя по идее он должен исчезнуть. То есть, Joomla продолжает считать, что юзер находится на главной странице.
Если же открыть этот материал обычным макаром — через меню — то модуль исчезает (как и положено).
Вопрос: как заставить Joomla при нажатии на ссылку «читать далее» убирать все модули, которые не должны публиковаться нигде, кроме главной страницы?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Комментарии:15