Просмотры
Материал из База знаний Joomla.
Статья руководства Создание шаблона Joomla
Создание шаблона Joomla 1.0.х
Руководство
- Оглавление учебника
- Начало
- Основные понятия
- Что такое шаблон Joomla 1.0?
- Разработка дизайна на локальном сервере
- W3C-стандарты
- Из чего состоит шаблон Joomla 1.0?
- Создание шаблона Joomla: CSS и HTML
- Модули в шаблоне
- Создание меню
- Сокрытие областей шаблона
- Заключение
- Приложения
- Бесплатные инструменты для разработки шаблона
- Советы и трюки
- Преимущества и недостатки табличной верстки
Любая перепечатка учебника или его части запрещена без согласия администрации 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 - трюки и советы |
Последнее изменение этой страницы: 13:07, 5 августа 2007.



