files templateНаш шаблон 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 | обновление joomla | модуль joomla | администрирование | seo продвижение | joomla магазиншаблоны сайтов

обратная связь 

При копировании материала ссылка на сайт joomla4.ru обязательна.