В предыдущем уроке мы изменили код шаблона так, что он стал изменять ширину колонок, чтобы не выводить пустое место там, где нет содержания. Но если посмотреть код полученной страницы, то в нем можно найти пустые блоки div
. Такое положение может привести к проблемам при отображении в различных браузерах.
Следующим шагом в улучшении шаблона является отключение генерации кода модулей, если в них нет содержания. Для решения задачи будем использовать простую конструкцию:
1 |
<?php if ( $this ->countModules( 'left' )) : ?> |
2 |
<div id= "sidebar" class = "grid_<?php echo $leftcolgrid;?>" > |
3 |
<jdoc: include type= "modules" name= "left" style= "xhtml" /> |
Такой код не будет генерировать <div id="sidebar">
, если в данной позиции нет никакого содержания.
Используя такую конструкцию для левой и правой панели получим код файла index.php:
06 |
defined( '_JEXEC' ) or die ; |
07 |
$app = JFactory::getApplication(); |
09 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
10 |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > |
11 |
<html xmlns= "http://www.w3.org/1999/xhtml" xml:lang= "<?php echo $this->language; ?>" lang= "<?php echo $this->language; ?>" > |
13 |
<jdoc: include type= "head" /> |
14 |
<link rel= "stylesheet" href= "<?php echo $this->baseurl?>/templates/system/css/system.css" type= "text/css" /> |
15 |
<link rel= "stylesheet" href= "<?php echo $this->baseurl?>/templates/system/css/general.css" type= "text/css" /> |
16 |
<link rel= "stylesheet" href= "<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/template.css" type= "text/css" /> |
17 |
<link rel= "stylesheet" href= "<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/grid.css" type= "text/css" /> |
20 |
<div id= "header" class = "container_12" > |
21 |
<h1><?php echo $app ->getCfg( 'sitename' );?></h1> |
22 |
<jdoc: include type= "modules" name= "top" style= "xhtml" /> |
29 |
if ( $this ->countModules( 'left' ) == 0): |
33 |
if ( $this ->countModules( 'right' ) == 0): |
38 |
<div id= "content" class = "container_12" > |
39 |
<?php if ( $this ->countModules( 'left' )) : ?> |
40 |
<div id= "sidebar" class = "grid_<?php echo $leftcolgrid;?>" > |
41 |
<jdoc: include type= "modules" name= "left" style= "xhtml" /> |
44 |
<div id= "maincolumn" class = "grid_<?php echo(12-$leftcolgrid-$rightcolgrid);?>" > |
45 |
<jdoc: include type= "modules" name= "breadcrumbs" style= "xhtml" /> |
46 |
<jdoc: include type= "component" /> |
48 |
<?php if ( $this ->countModules( 'right' )) : ?> |
49 |
<div id= "sidebar-2" class = "grid_<?php echo $rightcolgrid;?>" > |
50 |
<jdoc: include type= "modules" name= "right" style= "xhtml" /> |
55 |
<div id= "footer" class = "container_12" > |
56 |
<jdoc: include type= "modules" name= "footer" style= "xhtml" /> |
58 |
<jdoc: include type= "modules" name= "debug" /> |
Основные принципы построения шаблона для Joomla раскрыты. Теперь попробуем сделать внешний вид шаблона более привлекательным.
Делаем шаблон для Joomla 1.6
В результате предыдущих действий у нас есть базовая структура шаблона. Но реальное проектирование шаблона начинается с создания визуального макета страницы. То есть, сначала проектируется дизайн или внешний вид. Для этого можно использовать какой-либо графический редактор. А Макет страницы может быть как растровым, так и векторным. Затем из макета нарезаются изображения для различных элементов шаблона - для фонов, для кнопок, для меток и так далее. Процесс создания макета и нарезка из него комплекта изображений для шаблона выходит за рамки нашего урока. По данной теме можно найти много материала.
За основу для нашего шаблона мы возьмем следующий макет:
В комплект исходников к данному уроку включены изображения, которые нарезаны с данного макета для нашего шаблона.
Раздел заголовка страницы
Изображение для фона заголовка имеет небольшой градиент цвета сверху. Добавим фон к заголовку, а также установим соответствующий цвет позади изображения. Такой подход позволит растягивать заголовок по вертикали (например, если в дальнейшем потребуется увеличить размер шрифта). Также необходимо поменять цвет текста, чтобы он соответствовал фону.
Вот код CSS для заголовка, который надо добавить в файл template.css нашего шаблона:
02 |
border-bottom : 3px solid #87B825 ; |
03 |
background : #B4E637 url (../images/header-bg.gif) repeat-x top left ; |
08 |
font-family : Georgia, serif ; |
11 |
background : url (../images/bulls-eye.gif) no-repeat top left ; |
Для тега h1
устанавливается в качестве фона изображение, которое является своеобразным логотипом нашего шаблона. Его можно не использовать, оно приведено только в качестве демонстрации возможного решения таких задач при разработке шаблонов.
После внесения изменения в стили шаблона, заголовок будет выглядеть так:
Фон колонок
Если указать цвет для фона колонок, то он будет использоваться только на высоту контента колонки. Поэтому, если колонки имеют разную высоту содержания, то и фон для них будет заканчиваться на разной высоте. Такое положение в сочетании со стилизацией нижнего колонтитула выглядит очень коряво. Ситуация возникает по причине того, что элемент div
, в нашем случае - это sidebar
и sidebar-2
— имеют высоту содержания. И они не будут растягиваться до нижнего колонтитула. Это является недостатком системы построенной на основе сетки. Придется использовать JavaScript, чтобы получить нормальное заполнение фоном боковых колонок.
В нашем шаблоне используется скрипт Dynamic Drive для вычисления высоты колонок и выравнивания их. Добавляем в папку нашего шаблона каталог js, в котором размещаем файл скрипта. Обратите внимание, что нужно изменить имена элементов, которые используются при вызове скрипта, чтобы они соответствовали нашему шаблону. А в разделе head файла index.php нашего шаблона надо добавить загрузку скрипта:
1 |
<script src= "<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/js/equalcolumns.js" type= "text/javascript" ></script> |
Также мы добавим еще один блочный элемент “maincolbck
” для использования затухающего желтого цвета сверху центральной колонки.
В файле скрипта equalcolumns.js инициализация скрипта для нашего шаблона будет выглядеть следующим образом (все перечисленные элементы будут иметь одинаковую высоту):
1 |
ddequalcolumns.columnswatch=[ "content" , "maincolbck" , "sidebar" , "maincolumn" , "sidebar-2" ] |
Основная часть кода файла index.php будет выглядеть следующим образом:
01 |
<div id= "content" class = "container_12" > |
03 |
<?php if ( $this ->countModules( 'left' )) : ?> |
04 |
<div id= "sidebar" class = "grid_<?php echo $leftcolgrid;?>" > |
05 |
<jdoc: include type= "modules" name= "left" style= "xhtml" /> |
08 |
<div id= "maincolumn" class = "grid_<?php echo(12-$leftcolgrid-$rightcolgrid);?>" > |
09 |
<jdoc: include type= "modules" name= "breadcrumbs" style= "xhtml" /> |
10 |
<jdoc: include type= "component" /> |
12 |
<?php if ( $this ->countModules( 'right' )) : ?> |
13 |
<div id= "sidebar-2" class = "grid_<?php echo $rightcolgrid;?>" > |
14 |
<jdoc: include type= "modules" name= "right" style= "xhtml" /> |
А в файл template.css добавим следующие правила:
05 |
background : url (../images/content-bg.gif) repeat-x top left ; |
08 |
background : url (../images/wrap-bg.gif) repeat-y top right ; |
11 |
background : #828377 url (../images/footer-bg.gif) repeat-x top left ; |
После сохранения изменений сайт с нашим шаблоном будет иметь вид:
Модули
При разработке шаблона нужно продумывать следующие моменты: будет ли он растягиваться по вертикали и по горизонтали, куда будут выводиться меню. Для фонов модулей нашего шаблона будут использоваться пара простых изображений, которые будут растягиваться по обеим осям.
Добавим следующие правила в файл template.css:
01 |
#sidebar .moduletable,#sidebar -2 .moduletable { |
02 |
margin : 10px 0 10px 0 ; |
07 |
background : #fff url (../images/box-b.gif) no-repeat bottom right ; |
09 |
#sidebar h 3 ,#sidebar -2 h 3 { |
12 |
font-family : Georgia, serif ; |
16 |
background : url (../images/box-t.gif) no-repeat top left ; |
18 |
#sidebar p,#sidebar -2 p,sidebar ul,#sidebar -2 ul { |
22 |
sidebar ul li,#sidebar -2 ul li { |
26 |
background : url (../images/li-bullet.gif) no-repeat 0 3px ; |
Теперь нужно убрать у всех модулей меню суффикс _menu и удалить из файла template.css все стили для класса moduletable_menu.
После сохранения изменений и обновления страницы наш сайт будет выглядеть следующим образом:
Типографика
Работа с типографикой значительно упрощена в Joomla 1.6. В предыдущих версиях существовали специальные классы, например contentheading, для различных частей выводимого содержания. Теперь используются теги заголовков и полностью отсутствует табличная верстка. Поэтому для заголовков статей можно просто установить определенный вид:
01 |
h 1 , h 2 , h 3 , h 4 , h 5 , h 6 { |
02 |
font-family : Georgia, serif ; |
07 |
h 1 { font-size : 2em ; line-height : 1 ; margin-bottom : 0.5em ;} |
08 |
h 2 { font-size : 1.5em ; margin-bottom : 0.75em ;} |
09 |
h 3 { font-size : 1.25em ; line-height : 1 ; margin-bottom : 1em ;} |
10 |
h 4 { font-size : 1.1em ; line-height : 1.25 ; margin-bottom : 1.25em ;} |
Также можно добавить обработку определенных классов для вывода информирующих иконок:
02 |
background : #F8FAFC url (../images/info.png) center no-repeat ; |
03 |
background-position : 15px 50% ; |
05 |
padding : 5px 20px 5px 45px ; |
06 |
border-top : 2px solid #B5D4FE ; |
07 |
border-bottom : 2px solid #B5D4FE ; |
10 |
background : #FFF7C0 url (../images/warn.png) center no-repeat ; |
11 |
background-position : 15px 50% ; |
13 |
padding : 5px 20px 5px 45px ; |
14 |
border-top : 2px solid #F7D229 ; |
15 |
border-bottom : 2px solid #F7D229 ; |
19 |
background : #FBEEF1 url (../images/exc.png) center no-repeat ; |
20 |
background-position : 15px 50% ; |
22 |
padding : 5px 20px 5px 45px ; |
23 |
border-top : 2px solid #FEABB9 ; |
24 |
border-bottom : 2px solid #FEABB9 ; |
28 |
background : url (../images/tick.png) no-repeat 0 4px ; |
В окончательном виде наш шаблон будет выглядеть так:
Все. В данной серии уроков были представлены базовые сведения для создания шаблона Joomla. Изучение документации по функциям системы позволит вам создавать действительно сложные и отлично работающие варианты.