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

Войти
   
   Начало   Поиск Joomla 2.5 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Различные условия в шаблонах  (Прочитано 26403 раз)
0 Пользователей и 1 Гость смотрят эту тему.
beliyadm
Профи
********

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

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


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


« : 01.03.2008, 15:23:39 »

Очень часто бывают ситуации, когда возможностей привязки модулей на определенные ссылки в меню недостаточно, либо требуется более точечно отладить шаблон.
В FAQ уже существуют две замечательные темы:
Небольшие хитрости с позициями модулей
Отображение модулей в зависимости от параметра переменной $task
Но здесь рассмотрим более тривиальные и простые задачи.

Задача 1 - отображать\скрывать блоки сайта в зависимости от наличия публикации модулей
Для примера возьмем трехколоночный табличный резиновый шаблон, правая левая колонки по 25% ширины, центр тянется
Код:
<table width="100%">
 <tr>
  <td width="25%"><?php mosLoadModules ( 'left' ); ?></td>
  <td>
   <?php echo mosMainBody(); ?>
  </td>
  <td width="25%"><?php mosLoadModules ( 'right' ); ?></td>
 </tr>
</table>
Делаем вот так:
Код:
<table>
 <tr>
  <td width="25%"><?php mosLoadModules ( 'left' ); ?></td>
  <td>
   <?php echo mosMainBody(); ?>
  </td>
         <?php
         if ( mosCountModules( 'right' ) ) { ?>
         <td width="25%"><?php mosLoadModules ( 'right' ); ?></td>
         <?php } else {} ?>
  </td>
 </tr>
</table>
Что там это дает - при отсутствии опубликованных модулей в позиции RIGHT правая колонки исчезнет с сайта, и центральная с блоком mainbody будет занимать 75% ширины, вместо 50% как ранее.
Если подобную процедуру применить к левой ячейке - то mainbody вытянется на всю ширину экрана.

Задача 2 - популярный вопрос по отображению модулей (к примеру последних новостей) только на главной странице
Пусть блок наших новостей расположен в центральной колонке в позиции TOP, над ним PATHWAY. Нам надо чтобы на главной были последние новости но не мешался mainbody и не было pathway, на других страницах убирался модуль и был pathway с mainbody
Код:
<table width="100%">
 <tr>
  <td width="25%"><?php mosLoadModules ( 'left' ); ?></td>
  <td>
     <?php if ( !isset($option) || @$option=='com_frontpage' ) {
     mosLoadModules ( 'top' ); } else { ?>
     <div><?php echo mosPathWay(); ?></div>
     <div><?php echo mosMainBody(); ?></div>
     <?php } ?>
  </td>
  <td width="25%"><?php mosLoadModules ( 'right' ); ?></td>
 </tr>
</table>
Должен сказать - весьма популярная конструкция, сам часто пользуюсь.


Задача 3 - "как скрыть правую колонку для форума"
Конструкция аналогично вопросу 2, только заменяем com_frontpage на название компонента.
К примеру com_firebird и применяем условие к правой колонке.

Задача 4 - разные картинки для разных страниц сайта
Можно найти какой нибудь модуль, написать свой, я же приведу одно из решений - когда мало того, что надо менять картинку на заранее определенную для страницы, так эта картинка должна быть фоновой для какого то элемента.
Код:
<?php
if (@$Itemid == '1') {
$modulecss = 'img1';
} if (@$Itemid == '44') {
$modulecss = 'img2';
} else { $modulecss = 'img1'; }
?>
<div class="<?php echo $modulecss; ?>"></div>
В файле стилей делаю два класса:
img1 { background: url(img1.jpg); }
img2 { background: url(img2.jpg); }
У главной страницы ItemID равен 1 - будет работать класс img1 с фоновой картинкой img1.jpg
Для страницы с ItemID 44 - соответственно класс img2 с картинкой img2.jpg
Для всех остальных страниц по умолчанию класс img1
Что такое ItemID здесь

Если же нам требуется просто поместить разные картинки на разные пункты меню, то будет выглядеть примерно так:
Код:
<?php
if (@$Itemid == '11' ) { echo "<img src='images/ico/1.gif' border='0' />";
} elseif (@$Itemid == '12' ) { echo "<img src='images/ico/2.gif' border='0' />";
} elseif (@$Itemid == '13' ) { echo "<img src='images/ico/3.gif' border='0' />";
} else {}
?>

Совмещяя данный пример с любым предыдущим - можно отображать элементы также и по идентификаторам пункта меню.
Кстати данный пример можно использовать для задания разным страницам сайта различного оформления CSS (е примеру background-color) без подключения дополнительных файлов стилей.
Обычно подобный прием я использую, если надо сделать разные шапки для разных страниц

Задача 5 - как избежать множества шаблонов, но сохранить возможность индивидуальной настройки главной и внутренних страниц
Открываем index.php нашего шаблона и в нем пишем:
Код:
<?php
defined( '_VALID_MOS' ) or die( 'ERROR' );
switch ($option) {
   case 'com_frontpage': //for main page
     include_once ('front.php');
     break;

   default:  // default for all pages
      include_once ('inner.php');
      break;
}
?>
Что происходит - front.php и inner.php становятся как бы индексными из  разных шаблонов, содержимое каждого такого файла уже будет в точности соответствовать index.php разных шаблонов. Можно подключать различные стили CSS, графику, скрипты.
Можно продолжить данный кейс и отдавать разные страницы другим компонентам.

Итоги
Комбинируя данные приемы можно очень гибко управлять шаблоном, адаптируя практически любой дизайн под joomla

Внимание - в лоб применить данные приемы возможно лишь тогда, когда шаблон вы делаете самостоятельно. В большинстве же случаев (особенно если шаблон на DIV) - придется хорошенько покопаться в файле template_css.css
« Последнее редактирование: 01.03.2008, 15:54:31 от beliyadm » Записан
userxp
Администратор
*******

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

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


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


« Ответ #1 : 01.03.2008, 15:46:22 »

при переборе картинок я не вижу смысла использовать конструкцию IF( ... )

switch( @Itemid )
{
	
case 
1:
	
	
...
some code...;
	
break;

	
case 
2:
	
	
...
some code...;
	
break;

	
case 
N:
	
	
...
some code...;
	
break;

	
default:
	
	
...
some code...;
	
break;
}

ps. кстати, это
Цитировать
   if (@$Itemid == '11' ) { echo "<img src='images/ico/1.gif' border='0' />";
   } if (@$Itemid == '12' ) { echo "<img src='images/ico/2.gif' border='0' />";
   } if (@$Itemid == '13' ) { echo "<img src='images/ico/3.gif' border='0' />";
   } else {}
не правильно


должно быть:

if (@$Itemid == '11' )
{
   echo "<img src='images/ico/1.gif' border='0' />";
}
elseif (@$Itemid == '12' )
{
   echo "<img src='images/ico/2.gif' border='0' />";
}
elseif (@$Itemid == '13' )
{
   echo "<img src='images/ico/3.gif' border='0' />";
}
else
{
}
« Последнее редактирование: 01.03.2008, 15:50:52 от userxp » Записан
beliyadm
Профи
********

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

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


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


« Ответ #2 : 01.03.2008, 15:53:30 »

согласен и про    case и про elseif, задача стояла то не дать правила php, а основы манипуляции в шаблоне.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@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