Код шаблона defTemplate1-3-1 (раздел - Абитуриенту) 8
Код шаблона phpContent: (страница погоды) 9
О шаблонах в TYPO3
В CMS TYPO3, как и во почти всех CMS есть четкое разделение на содержание сайта и визуальное отображение сайта – есть контент, есть шаблон (или шаблоны) его отображения.
Шаблон в TYPO3 очень похож общим принципом на xml файлы, но с большим количеством возможностей – по определенному принципу (с помощью TypoScript) описывается какая-либо структура.
Возможностей управления сайтом или порталом в этом языке масса – но, чтоб его эффективно использовать, надо много знать (в этом вам помогут документы rus_manual-doc_core_tsref_4-0-0.sxw – (далее в тексте TSR) и Modern_template_building__Part_1.sxw).
Шаблоны – это очень гибкая возможность управления видом сайта – есть возможность определять шаблон в зависимости от внешних условий (ip-адреса, браузера клиента, наличия на странице плагина, времени суток и т.д.), есть возможность создавать динамические элементы контента, подгружать файлы и управлять модулями CMS.
Шаблоны в TYPO3, благодаря иерархичности страниц наследуемые. То есть – если странице не задан шаблон – она наследует шаблон страницы-родителя.
Для подразделов или особых страниц можно задать полностью оригинальный шаблон – по желанию администратора сайта.
Управление шаблонами
Шаблоны можно создавать для каждой страницы с помощью пункта WEB>Template или WEB>List добавляя их там в виде элемента контента страницы.
Редактировать шаблон полностью можно с помощью пункта WEB>Template и нажав Edit the whole template record или WEB>List, нажав на карандаш у элемента template данной страницы.
Рассмотрим появившуюся форму управления шаблоном.
Вкладка General – на ней определяется название шаблона, заголовок сайта и собственно его отображение и описание шаблона.
Самые важные поля на данной вкладке – Constants и Setup.
Constants -собственно, раздел объявления констант, которые можно использовать в поле Setup.
Setup – здесь и задаются все настройки отображения сайта( Различные условия, параметры, файлы и т.д.)
Вкладка Options – здесь определяются параметры наследования у данного шаблона. Раздел Clear – поставленная галочка уберет все унаследованные от старницы родителя опции в разделах Setup или Constants, ну и заодно определяется – будет ли этот шаблон считаться «корневым» - «rootlevel» (если да, то меню будет состоять только из страниц этого раздела).
Вкладка Includes – здесь подключаются, так называемые «статические шаблоны» - шаблоны CMS или модулей в которых заданы их параметры отображения. В корневом шаблоне сайта необходимо обязательно добавить – в разделе Include static - content(default), и в разделе Include static (from extensions) - CSSStyledContentTYPO3 (css_styled_content). Если эти статические шаблоны не подключить - никакой контент в самодельных шаблонах выводиться не будет.
Также, для корректной работы модуля tt_news необходимо подключить один из его шаблонов отображения (в данном случае table-based tmpl(tt_news)). Иначе, опять же, новости выводиться не будут.
Остальные вкладки не столь значительны и не будут рассматриваться здесь (подробней о них можно прочитать в встроенной помощи TYPO3)
Анализ шаблонов основного сайта shgpi.edu.ru
Код шаблона shgpi_main (General>Setup): В TypoScript (TS) знак комментария обозначается как #
# CMS не будет автоматически формировать title страницы
config.noPageTitle = true
# Данные 3 строчки обеспечивают работу расширения CoolURI, которое создает читаемые
# адреса страниц. Также для корректной работы данного расширения необходимы
# некоторые опции в файле .htaccess (указаны в документе aboutCoolURI.doc)
config.baseURL = http://www.shgpi.edu.ru/
config.tx_cooluri_enable = 1
config.redirectOldLinksToNew = 1
# Здесь задан набор свойств конфигурации – в основном, задана только правильная
# кодировка – подробнее можно почитать в TSR
config {
sys_language_uid = 0
language = ru
locale_all = ru_RU.UTF-8
forceCharset = utf-8
metaCharset = utf-8
renderCharset = utf-8
}
# Создание объекта типа PAGE. Это необходимый объект – подробнее в TSR
page = PAGE
page.typeNum = 0
# Создание объекта типа COA. С помощью этого объекта я создаю заголовки/
# Создание под-объекта под номером 1 типа TEXT
page.headerData.1 = COA
page.headerData.1.1 = TEXT
# Вытаскивание из БД заголовка первой страницы сайта
page.headerData.1.1.data = fullRootLine : 0, title
# Заключение этого значения в теги title, вертикальная черта – зарезервированный знак в
# TS обозначающий текущее значение объекта
page.headerData.1.1.wrap =
| # Создание под-объекта под номером 2 типа TEXT
# Следующей строкой подключаются стили.
page.headerData.2 = TEXT
page.headerData.2.value =
# Создание под-объекта под номером 5 типа FILE
# Указание пути к файлу. Содержимое файла будет
# выведенно. Php файлы так подключать нельзя – не будут работать.
page.5 = FILE
page.5.file = fileadmin/template/s1.txt
# Здесь вставляется картинка и ссылка из левого верхнего угла сайта. В последующих
# шаблонах она будет заменяться названием раздела и ссылкой на его первую страницу.
page.6 = TEXT
page.6.value =
shgpi.edu.ru
# закрытие тегов для корректного отображения названия раздела (или ссылки на главную)
page.6.wrap = |
# HMENU (hierarchical menu) спец объект через который отображаются все меню сайта, т.е. данный объект отображает какое то количество уровней дерева страниц.
page.7 = HMENU
# TMENU (text menu) – спец объект для отображения одного уровня дерева страниц. В данном случае отображается первый подуровень от корня дерева страниц (от страницы с заголовком ШГПИ)
page.7.1 = TMENU
# Свойства page.7.1 = TMENU
page.7.1 {
# noBlur = 1 – убирает подсветку с «текущего» пункта
noBlur = 1
# expAll = 0 – свойство, которое определяет отображать ли в меню подстраницы текущих
# страниц в виде подменю (если для них задано отображение) сразу развернутыми (если
# expAll = 1) или подменю отображаются только у «текущего» пункта. Для отображения
# подменю необходимо, чтобы существовало отображение данного подменю. (т.е. в
# данном случае, существовал бы page.7.2 = TMENU с какими либо свойствами).
# Подробнее в TSR
expAll = 0
# collapse = 0 – свойство, с помощью которого устанавливается - сворачивать ли
# развернутые подменю по нажатию «предка» этих подстраниц (если collapse = 1) или не
# сворачивать (если collapse = 0). В данном шаблоне, значение задано для дефолта.
collapse = 0
# заключает неактивные пункты меню в
NO.linkWrap =
|
# включает отображение разделителей (spacers)
SPC = 1
# заключает их в
(для выравнивания в меню).
SPC.allWrap =
|
}
# заключает все меню в css теги menu.
page.7.wrap =
|
# Секция, срабатывающая по условию – если клиент заходит со КПК, смартфона и т.д.
# разберем только новые ключи.
# в квадратных скобках записывается условие – в данном случае – срабатывает
# php-функция, записаная в localconf.php
[userFunc = user_isMobile()]
page.5 = TEXT
page.5.value =
page.6 = TEXT
page.6.value =
page.6.wrap = |
page.7 = HMENU
page.7.1 = TMENU
page.7.1 {
noBlur = 1
expAll = 0
collapse = 0
SPC = 0
# Очистка wrap’ов переопределением
NO.allWrap = |
CUR.allWrap = |
NO {
# Не создавать ссылку этому пункту автоматически – я создам её вручную, потому что
# она будет одним из пунктов select’а
doNotLinkIt = 1
stdWrap.cObject = COA
stdWrap.cObject {
10 = TEXT
10.value =
}
}
# Все делается аналогично для текущего пункта меню, только он еще выбирается при этом
CUR = 1
CUR {
doNotLinkIt = 1
stdWrap.cObject = COA
stdWrap.cObject {
10 = TEXT
10.value =
}
}
}
# создается select и функция перехода
page.7.wrap =
Навигация:
[end]
# создается select и функция перехода – добавляется пункт сервисы (телефоны и т.д.)
[userFunc = user_isMobile()] && [treeLevel = 1]
page.7.wrap =
Навигация:
[end]
# Создание объекта типа CONTENT который будет отображать содержимое страницы
page.10 = CONTENT
# опция (функция), которая отображает весь контент страницы
page.10.table = tt_content
page.10.wrap =
|
# задание свойств «виду отображения» list в модуле новостей tt_news
plugin.tt_news.displayList {
# формирование даты новостей.
date_stdWrap.strftime= %d.%m.%Y:
# стирание обычных для tt_news тегов обрамляющих вывод
title_stdWrap >
# обрезка после 512 символов title новости и замена последующих на …
# Это сделано из-за того, что tt_news расширении версии 2.5.2 максимальная длинна title
# при добавлении новости ограничена.
title_stdWrap.crop = 512 | ... | 1
}
На этом анализ основного шаблона закончен – далее рассмотрим дополнительные шаблоны сайта – шаблоны подразделов и шаблон с интегрированным php-скриптом.
Шаблоны для подразделов рассмотрим на примере самого простого – все они отличаются лишь тем, что title строится из разного количества уровней (кроме шаблона для раздела Абитуриенту – он особенный).
Код шаблона defTemplate1-2 Основные отличия данного шаблона:
Он неполный – он наследует корневой шаблон и перегружает несколько его объектов.
Поставлена галочка у свойства rootlevel – таким образом, меню строится для текущего подраздела
# Переопределение секции, которая находится над меню – замена ссылки на главную,
# текстовой ссылкой на главную страницу данного раздела.
page.6 = TEXT
page.6 {
# Свойство data – позволяет вытаскивать с помощью спец аргументов различные значения
# из БД. В данном случае вытаскивается заголовок страницы 0го для данного раздела
# уровня (т.е. той страницы, которой принадлежат текущие подстраницы).
data = leveltitle : 0
typolink {
# ссылка на главную страницу данного раздела
parameter.data = leveluid : 0
# по названию думаю понятно. Подробней в TSR
ATagBeforeWrap = 1
wrap = |
}
}
# Переопределение отображения свойства headerData
page.headerData.1 = COA
# Формирование заголовка из заголовков страниц от корня до текущей.
# Вытаскивается заголовок страницы на 2 уровня выше, затем на 1, затем текущий
page.headerData.1.1 = TEXT
page.headerData.1.1.data = fullRootLine : -1, title
page.headerData.1.1.wrap =
| >
page.headerData.1.2 = TEXT
page.headerData.1.2.data = fullRootLine : 0, title
page.headerData.1.2.wrap = | >
page.headerData.1.3 = TEXT
page.headerData.1.3.data = fullRootLine : 1, title
page.headerData.1.3.wrap = |
Код шаблона defTemplate1-3-1 (раздел - Абитуриенту)
# рассмотрим только отличия от базового.
# Переопределение отображения меню
page.7 = HMENU
page.7.1 = TMENU
page.7.1 {
noBlur = 1
expAll = 0
# данное свойство означает, что подменю будут сворачиваться.
collapse = 1
# IFSUB = 1 – указание, что для страниц имеющих подстраницы будут использованы
# отдельные свойства.
# linkWrap – обрамление ссылки в меню. В данном случае подгружается изображение
# плюсика.
IFSUB = 1
IFSUB {
linkWrap =
|
ATagBeforeWrap = 1
}
# ACTIFSUB = 1 – указание, что для страницы имеющей подстраницы и являющейся
# «текущей» будут использованы отдельные свойства.
# linkWrap – обрамление ссылки в меню. В данном случае подгружается изображение
# минуса.
ACTIFSUB = 1
ACTIFSUB {
linkWrap =
|
ATagBeforeWrap = 1
}
NO.linkWrap =
|
SPC = 1
SPC.allwrap =
|
}
# Создание объекта для отображения 2го уровня меню. И задание стиля для ссылок
# данного подменю
page.7.2 = TMENU
page.7.2.noBlur = 1
page.7.2.NO.linkWrap =
|
Код шаблона phpContent: (страница погоды)
# Страница не кешируется. Необходимо для функ-ия
# данного способа подключения php скриптов.
config.no_cache = 1
# Убираем отображение контента для данной страницы.
page.10 = TEXT
page.10.value =
page.28 = TEXT
page.28.value =
# Создаем объект типа PHP_SCRIPT – подробнее в TSR
page.30 = PHP_SCRIPT
# подключение скрипта. *.php должны быть заменены на *.inc или *.txt
page.30.file = fileadmin/informers/meteo/cm.inc
# wrap не работает для такого объекта .
page.38 = TEXT
page.38.value =
Сам php-скрипт для корректной работы должен быть приведен к виду.
Class ClassName {
function func1()
{
……………..
return $result;
}
}
$content = ClassName:: func1();
?>
Если обобщить:
Должен быть класс и функция в нем, которая выводит что либо с помощью return.
Должна быть определена переменная $content, которая и будет выводиться.
Основные правила набора и оформления текста Текст необходимо строить по определенной схеме. Обычно какой-либо документ или статья состоит из заголовка и основного текста, разбитого...