Действия

Сокрытие областей шаблона

Материал из База знаний Joomla

Статья руководства Создание шаблона Joomla


Создание шаблона Joomla 1.0.х
Руководство

CMS Joomla - внешний вид

Оглавление учебника

Приложения

Любая перепечатка учебника или его части запрещена без согласия администрации Joom.ru


Наш шаблон Joomla устроен так, что всегда будет выводиться 3 колонки, независимо от того, имеется ли в них содержимое или нет. Для большей функциональности своих шаблонов, дизайнеры пользуется небольшим трюком: сокрытием областей шаблона, если в них не опубликовано ни одного модуля. Допустим, на главной странице вашего сайта во всех трех колонках имеется хотя бы по одному модулю. Посетитель заходит в раздел контакты и видит левую и центральную колонки. Удобно, не правда ли?

Приступим. Я хочу добавить эту функциональную опцию для левой и правой колонок. Вообще, чтобы скрыть какую-либо область, нужно вставить небольшой php-код, всего в две строчки. Для сокрытия используется оператор if:

<?php if (mosCountModules('left')) { ?>
  <?php mosLoadModules('left',-2);?> 
<?php } ?>

if (mosCountModules('left')) - в переводе на русский язык означает "если количество модулей в позиции left больше 0, то..."

Таким образом, дословно это конструкция переводится как: "Если количество модулей в позиции left больше 0, то вывести модули".

Обычно <?php if (mosCountModules('left')) { ?> ставят перед началом области, которую хотят скрыть (или показать), а <?php } ?> после области. Например

<?php if (mosCountModules('left')) { ?>
  <div id="sidebar"> 
    <div class="inside"> 
       <?php mosLoadModules( 'left', -2 );?>
    </div>
  </div> 
<?php } ?>

Это означает, что если у меня не будет в позиции left опубликованных модулей, то левая колонка не будет выведена на экран. Но не стоит забывать, что в левой колонке также была позиция user1. В таких ситуациях, когда в определённой области шаблона находится больше одной позиции для вывода модулей, используется логическое ИЛИ:

<?php if (mosCountModules('left') || mosCountModules('user1')) { ?> 
  <div id="sidebar">
    <div class="inside"> 
      <div id="navcontainer"> 
        <?php mosLoadModules('user1',-2);?> 
      </div> 
        <?php mosLoadModules('left',-2);?>
    </div>
  </div>
<?php } ?>

После сделанных изменений, мой index.php окончательно выглядит так:

<?php defined( '_VALID_MOS' ) or die( 'Доступ ограничен' ); ?>
<!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" lang="<?php echo _LANGUAGE; ?>" 
xml:lang="<?php echo _LANGUAGE; ?>"
<head>
<meta http-equiv="Content-Type" content="text/html; <?php echo _ISO; ?>" />
<?php if ($my->id) { initEditor(); } ?>
<?php mosShowHead(); ?>
<script type="text/javascript"> </script>
<link href="templates/<?php echo $cur_template; ?>/css/template_css.css" 
rel="stylesheet" type="text/css" media="screen" />
<?php if ( mosCountModules( 'right' ) <= 0) { ?> 
 <style type="text/css" media="screen"> 
  #main-body {width:100%;} 
  #content{width:75%;} 
  #sidebar{width:25%; 
  #wrap{background:none;}
 </style> 
<?php } ?>
</head>
<body> 
  <div id="wrap">
    <div id="header">
      <h1><?php echo $mosConfig_sitename; ?></h1> 
      <?php mospathway() ?>
    </div>
    <div id="main-body">
      <div id="content">
        <div class="inside">
          <?php mosLoadModules('top',-2);?>
          <?php mosMainBody(); ?>
        </div>
      </div>
      <?php if (mosCountModules('left') || mosCountModules('user1')) { ?>
      <div id="sidebar"> 
        <div class="inside">
          <div id="navcontainer">
            <?php mosLoadModules('user1',-2);?>
	  </div>
	    <?php mosLoadModules('left',-2);?>
        </div>
      </div>
      <?php } ?>
    </div> <!--end of main-body-->
    <?php if (mosCountModules('right')) { ?>
    <div id="sidebar-2">
      <div class="inside">
        <?php mosLoadModules('right',-2);?>
      </div>
    </div>
    <?php } ?>
    <div id="footer">
      <?php mosLoadModules('footer',-2);?>
    </div>
  </div><!--end of wrap-->
</body> 
</html>

Напоследок, в области "footer" я решил добавить позицию "footer" для модулей, чтобы не выводить содержимое файла footer.php.

Вернуться: Создание менюДалее: Создание шаблона Joomla - трюки и советы