|
Наш шаблон 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.
|