0 Пользователей и 1 Гость просматривают эту тему.
  • 2 Ответов
  • 38398 Просмотров
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Очень часто бывают ситуации, когда возможностей привязки модулей на определенные ссылки в меню недостаточно, либо требуется более точечно отладить шаблон.
В 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, 14:54:31 от beliyadm »
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Различные условия в шаблонах
« Ответ #1 : 01.03.2008, 14: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, 14:50:52 от userxp »
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Различные условия в шаблонах
« Ответ #2 : 01.03.2008, 14:53:30 »
согласен и про    case и про elseif, задача стояла то не дать правила php, а основы манипуляции в шаблоне.
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться