См. также "Подключение мобильных версий шаблонов".
Проще всего делать шаблоны на основе уже сверстанных в HTML статических страниц. Рассмотрим создание и подключение шаблона на примере. Допустим, уже есть HTML-файл такого содержания:
<html>
<head>
<meta name="description" content="описание сайта Василия Пупкина" />
<meta name="keywords" content="Вася Василий Пупкин официальный сайт" />
<title>Сайт Васи Пупкина: Главная страница</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
// начало меню
<table border="1">
<tr>
<td><a href="/"><b>Главная</b></a></td>
</tr>
<tr>
<td><a href="/about/">Обо мне</a></td>
</tr>
<tr>
<td><a href="/me_and_me/">Я и мировое господство</a></td>
</tr>
<tr>
<td><a href="/contacts/">Контакты</a></td>
</tr>
</table>
// конец меню
<h1>Главная страница</h1>
<p>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </p>
<p>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </p>
<p>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </p>
<p>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </p>
</body>
</html>
Для того, чтобы добавить шаблон в CMS, нужно создать файл в директории tpls/content
, например, test.tpl
, и вставить туда ваш HTML-код. CSS-файл следует положить в папку css/cms
и назвать style.css
. Изображения желательно положить в папку images
. Не забудьте поменять пути ко всем изображениям и CSS-файлам.
Замечание
В названии файла шаблона нельзя использовать русские буквы!
Чтобы система «увидела» новый шаблон и начала использовать его для вывода страниц, шаблон необходимо добавить в систему. Для этого следует зайти в настройки модуля «Структура», вкладка «Шаблоны» (http://yourdomain.ru/admin/content/config/). Вы увидите список уже установленных шаблонов в каждом домене, которые существуют в выбранной языковой версии.
Чтобы подключить новый файл шаблона, заполните в самой нижней свободной строке поля «Название шаблона» (дайте ему какое-нибудь осмысленное название, например «Мой тестовый шаблон») и «Имя файла» (в нашем случае, test.tpl
) и нажмите кнопку «Сохранить».
Если вы хотите, чтобы этот шаблон использовался в качестве шаблона по умолчанию, поставьте напротив него отметку «Основной». Теперь этот шаблон будет выбран по умолчанию в выпадающем списке выбора шаблонов. Так же он будет использоваться для вывода системных страниц, которые используют шаблон по умолчанию (Регистрация, Восстановление пароля, Карта сайта).
Шаблоны будут видны в выпадающем списке при редактировании каждой страницы:
Таким образом, на одном сайте можно одновременно использовать много шаблонов, выбирая подходящий шаблон как для отдельной страницы, так и для группы страниц.
Попробуйте создать новую страницу (убедитесь, что в опции «Шаблон дизайна» выбран новый шаблон) и посмотрите, что получилось на сайте.
На сайте должен появиться ваш HTML-шаблон. Но сейчас он статический. Теперь вам надо сделать его динамическим.
Для начала надо определить, какие части HTML-кода будут изменяться. В нашем случае изменяться будут:
-
заголовок окна <title>;
-
мета-теги keywords и description;
-
заголовок текста <h1>;
-
собственно текст;
-
меню сайта.
Значит, предстоит немного поработать с HTML-шаблоном и вместо изменяющихся участков поставить соответствующие макросы.
Например, в начале HTML-файла заданы мета-теги и тайтл:
<meta name="description" content="описание сайта Василия Пупкина" />
<meta name="keywords" content="Вася Василий Пупкин официальный сайт" />
<title>Сайт Васи Пупкина: Главная страница</title>
Заменяем их на соответствующие макросы (список макросов дан в приложении):
<meta name="description" content="%description%" />
<meta name="keywords" content="%keywords%" />
<title>%title%</title>
Теперь система при формировании страниц будет брать мета-теги и тайтл, прописанные для каждой страницы индивидуально, и подставлять их вместо соответствующих макросов. Названия макросов запомнить очень просто.
Аналогично поступим с заголовком текста. Было так:
<h1>Главная страница</h1>
А станет так. Заголовок текста выводится макросом %header%:
<h1>%header%</h1>
Основной текст страницы тоже изменяется:
<p>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </p>
<p>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </p>
<p>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </p>
<p>Текст обо мне: Текст обо мне: Текст обо мне: Текст обо мне: </p>
Для вывода основного текста страницы есть макрос %content%:
%content%
В начало файла между тегами <head>
и </head>
вставляем макрос:
%system includeQuickEditJs()%
Эта строчка подключает функцию быстрого редактирования и другие полезные возможности. При помощи нее вы сможете, нажав Shift+D, быстро перейти к правке текущей страницы сайта или каких-либо ее фрагментов.
В итоге должно получиться следующее:
<html>
<head>
<meta name="description" content="%description%" />
<meta name="keywords" content="%keywords%" />
<title>%title%</title>
<link href="style.css" rel="stylesheet" type="text/css" />
%system includeQuickEditJs()%
</head>
<body>
// начало меню
<table border="1">
<tr>
<td><a href="/"><b>Главная</b></a></td>
</tr>
<tr>
<td><a href="/about/">О компании</a></td>
</tr>
<tr>
<td><a href="/projects/">Проекты</a></td>
</tr>
<tr>
<td><a href="/contacts/">Контакты</a></td>
</tr>
</table>
// конец меню
<h1>%header%</h1>
%content%
</body>
</html>
Итак, мы сохраняем файл шаблона и смотрим на результат. Теперь страница практически полностью динамическая, за исключением меню. Предстоит «оживить» меню сайта. Посмотрим как сверстано меню:
// начало меню
<table border="1">
<tr>
<td><a href="/"><b>Главная</b></a></td>
</tr>
<tr>
<td><a href="/about/">Обо мне</a></td>
</tr>
<tr>
<td><a href="/me_and_me/">Я и мировое господство</a></td>
</tr>
<tr>
<td><a href="/contacts/">Контакты</a></td>
</tr>
</table>
// конец меню
Меню состоит из пунктов. Само меню как-то оформлено, и у пунктов тоже есть оформление. Например, у всего меню может быть некая рамка или фон, текущий пункт меню может быть выделен жирным и т.п. Также в одном меню могут быть разные уровни.
Выделим обрамление меню:
// начало меню
<table border="1">
<!-здесь пойдут пункты меню -->
</table>
// конец меню
Пункт меню оформлен так:
<tr>
<td><a href="/contacts/">Контакты</a></td>
</tr>
Текущий пункт меню оформлен по-другому:
<tr>
<td><a href="/"><b>Главная</b></a></td>
</tr>
Исходный шаблон меню находится в файле /tpls/content/menu/default.tpl
и выглядит так:
<?php
$FORMS = Array();
$FORMS['menu_block_level1'] = <<<END
%lines%
END;
$FORMS['menu_line_level1'] = <<<END
<div class="menu">
<a href="%link%" class="menu">%text%</a>
</div>
END;
$FORMS['menu_line_level1_a'] = <<<END
<div class="menu_a">
<span class="menu_a">%text%</span>
</div>
END;
?>
Вначале немного непонятно. На самом деле, все очень просто. Посмотрим на первую часть кода:
$FORMS['menu_block_level1'] = <<<END
%lines%
END;
Это блок, который называется menu_block_level1. Есть всего 3 типа таких блоков.
-
menu_block_level1 ― содержит HTML-обрамление меню;
-
menu_line_level1 ― содержит HTML-код пункта меню;
-
menu_line_level1_a ― то же самое, что и menu_line_level1, только используется для активного пункта меню.
Все, что расположено между <<<END и END; воспринимается, как html-шаблон (для всего меню или для отдельного пункта).
При генерации меню, система берет шаблоны пунктов (например, menu_line_level1), и ставит их друг за другом. Получается HTML-код, в котором содержатся все пункты меню. Этот код вставляется вместо макроса %lines%.
Итак, необходимо проставить код, который мы выделили выше (обрамление, пункты меню) в соответствующие блоки. Должно получиться примерно так:
<?php
$FORMS = Array();
$FORMS['menu_block_level1'] = <<<END
<table border="1">
%lines%
</table>
END;
$FORMS['menu_line_level1'] = <<<END
<tr>
<td><a href="%link%">%text%</a></td>
</tr>
END;
$FORMS['menu_line_level1_a'] = <<<END
<tr>
<td><a href="%link%"><b>%text%</b></a></td>
</tr>
END;
?>
Мы уже знаем, что вместо %lines% система подставляет пункты меню с их HTML-обрамлением. Нам встретились новые макросы. Вместо %link% вставляется URL пункта меню, а вместо %text% ― текст (определяется в поле «название страницы»).
Теперь меню можно вставить в шаблон страницы макросом %menu%::
<html>
<head>
<meta name="description" content="%description%" />
<meta name="keywords" content="%keywords%" />
<title>%title%</title>
<link href="style.css" rel="stylesheet" type="text/css" />
%system includeQuickEditJs()%
</head>
<body>
// начало меню
%menu%
// конец меню
<h1>%header%</h1>
%content%
</body>
</html>
Шаблон готов.
Если вы хотите на каких-то страницах сайта выводить меню по другому шаблону, нужно создать еще один файл с шаблоном меню в той же папке. Например, menu2.tpl
. Соответственно, при подключении меню к шаблону страницы вместо %menu% надо написать немного по-другому: %content menu('menu2')%.
Работа этого и других макросов подробно описана в текущей документации. Работа с ними строится точно по такому же принципу: вы разбиваете необходимый кусок HTML-шаблона на отдельные части, подставляете в соответствующие блоки нужных шаблонов, вставляете на место этого куска соответствующий макрос и он начинает работать.
Важно учитывать: не стоит размещать несколько макросов на одной строке. Вложенные макросы могут не сработать в качестве аргумента у других макросов.