Шаблоны основного сайта shgpi.edu.ru. Пояснения

advertisement
«Шаблоны основного сайта shgpi.edu.ru. Пояснения»
О шаблонах в TYPO3 ................................................................................................................1
Управление шаблонами ............................................................................................................1
Анализ шаблонов основного сайта shgpi.edu.ru .....................................................................3
Код шаблона shgpi_main .......................................................................................................3
Код шаблона defTemplate1-2 ................................................................................................7
Код шаблона 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 данной страницы.
Рассмотрим появившуюся форму управления шаблоном.
681449347
1
1) Вкладка General – на ней определяется название шаблона, заголовок
сайта и собственно его отображение и описание шаблона.
Самые важные поля на данной вкладке – Constants и Setup.
Constants -собственно, раздел объявления констант, которые можно
использовать в поле Setup.
Setup – здесь и задаются все настройки отображения сайта( Различные
условия, параметры, файлы и т.д.)
2) Вкладка Options – здесь определяются параметры наследования у
данного шаблона. Раздел Clear – поставленная галочка уберет все
унаследованные от старницы родителя опции в разделах Setup или
Constants, ну и заодно определяется – будет ли этот шаблон считаться
«корневым» - «rootlevel» (если да, то меню будет состоять только из
страниц этого раздела).
3) Вкладка Includes – здесь подключаются, так называемые «статические
шаблоны» - шаблоны CMS или модулей в которых заданы их
параметры отображения. В корневом шаблоне сайта необходимо
обязательно добавить – в разделе Include static - content(default), и в
разделе Include static (from extensions) - CSS Styled Content TYPO3
(css_styled_content). Если эти статические шаблоны не подключить никакой контент в самодельных шаблонах выводиться не будет.
4) Также, для корректной работы модуля tt_news необходимо подключить
один из его шаблонов отображения (в данном случае table-based
tmpl(tt_news)). Иначе, опять же, новости выводиться не будут.
681449347
2
Остальные вкладки не столь значительны и не будут рассматриваться здесь
(подробней о них можно прочитать в встроенной помощи 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 = <title> | </title>
# Создание под-объекта под номером 2 типа TEXT
# Следующей строкой подключаются стили.
page.headerData.2 = TEXT
681449347
3
page.headerData.2.value = <link rel="stylesheet" type="text/css"
href="fileadmin/template/style/style_all.css"><link rel="stylesheet" type="text/css"
href="fileadmin/template/style/style_menu.css"><link rel="stylesheet" type="text/css"
href="fileadmin/template/style/style_main.css"><link rel="stylesheet" type="text/css"
href="fileadmin/template/style/style_top.css"><link rel="shortcut icon"
href="fileadmin/template/images/favicon.ico">
# Создание под-объекта под номером 5 типа FILE
# Указание пути к файлу. Содержимое файла будет
# выведенно. Php файлы так подключать нельзя – не будут работать.
page.5 = FILE
page.5.file = fileadmin/template/s1.txt
# Здесь вставляется картинка и ссылка из левого верхнего угла сайта. В последующих
# шаблонах она будет заменяться названием раздела и ссылкой на его первую страницу.
page.6 = TEXT
page.6.value = <img src="fileadmin/template/images/shgpi.gif" border=0 alt="ШГПИ"
onclick="location.href='./index.php'"><p id='p1' style="display: block;"><a
href="http://shgpi.edu.ru">shgpi.edu.ru</a></p>
# закрытие тегов для корректного отображения названия раздела (или ссылки на главную)
page.6.wrap = | </td></tr></table></div>
# 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
681449347
4
# заключает неактивные пункты меню в <p> </p>
NO.linkWrap = <p> | </p>
# включает отображение разделителей (spacers)
SPC = 1
# заключает их в <p> </p> (для выравнивания в меню).
SPC.allWrap = <p> | </p>
}
# заключает все меню в css теги menu.
page.7.wrap = <div class="menu"> | </div></div>
# Секция, срабатывающая по условию – если клиент заходит со КПК, смартфона и т.д.
# разберем только новые ключи.
# в квадратных скобках записывается условие – в данном случае – срабатывает
# php-функция, записаная в localconf.php
[userFunc = user_isMobile()]
page.5 = TEXT
page.5.value = <div class="menu23">
page.6 = TEXT
page.6.value = <img src="fileadmin/template/images/shgpi.gif" border=0 alt="ШГПИ"
onclick="location.href='./index.php'">
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 = <option value="
20 = TEXT
# Задаю параметры ссылки
20.typolink {
# Вытаскиваю из БД uid текущей страницы
parameter.field = uid
681449347
5
# Вытаскиваю из БД последний URL по которому обращались к данной странице
returnLast = url
}
# Дописываю к ссылке ./ , чтобы корректно работали переходы на главную.
20.wrap = ./ |
30 = TEXT
# Вытаскиваю из БД заголовок страницы и окончательно создаю пункт select'а
30.dataWrap = ">{field:title}</option>
}
}
# Все делается аналогично для текущего пункта меню, только он еще выбирается при этом
CUR = 1
CUR {
doNotLinkIt = 1
stdWrap.cObject = COA
stdWrap.cObject {
10 = TEXT
10.value = <option value="
20 = TEXT
20.typolink {
parameter.field = uid
returnLast = url
}
30 = TEXT
30.dataWrap = " selected>{field:title}</option>
}
}
}
# создается select и функция перехода
page.7.wrap = <center>Навигация: <br /><select onChange="location = this.value;"> |
</select></center></div>
[end]
# создается select и функция перехода – добавляется пункт сервисы (телефоны и т.д.)
[userFunc = user_isMobile()] && [treeLevel = 1]
page.7.wrap = <center>Навигация: <br /><select onChange="location = this.value;"><option
value="./index.php?id=1000">Сервисы</option> | </select></center></div>
[end]
# Создание объекта типа CONTENT который будет отображать содержимое страницы
page.10 = CONTENT
# опция (функция), которая отображает весь контент страницы
page.10.table = tt_content
page.10.wrap = <div class="main23"> | </div>
# задание свойств «виду отображения» list в модуле новостей tt_news
681449347
6
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
Основные отличия данного шаблона:
1) Он неполный – он наследует корневой шаблон и перегружает несколько его
объектов.
2) Поставлена галочка у свойства rootlevel – таким образом, меню строится для
текущего подраздела
# Переопределение секции, которая находится над меню – замена ссылки на главную,
# текстовой ссылкой на главную страницу данного раздела.
page.6 = TEXT
page.6 {
# Свойство data – позволяет вытаскивать с помощью спец аргументов различные значения
# из БД. В данном случае вытаскивается заголовок страницы 0го для данного раздела
# уровня (т.е. той страницы, которой принадлежат текущие подстраницы).
data = leveltitle : 0
typolink {
# ссылка на главную страницу данного раздела
parameter.data = leveluid : 0
# по названию думаю понятно. Подробней в TSR
ATagBeforeWrap = 1
wrap = <font color="black"> | </font>
}
}
# Переопределение отображения свойства headerData
page.headerData.1 = COA
# Формирование заголовка из заголовков страниц от корня до текущей.
681449347
7
# Вытаскивается заголовок страницы на 2 уровня выше, затем на 1, затем текущий
page.headerData.1.1 = TEXT
page.headerData.1.1.data = fullRootLine : -1, title
page.headerData.1.1.wrap = <title> | >
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 = | </title>
Код шаблона 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 = <p> <img src="fileadmin/template/images/plus.gif" alt = "Развернуть"
style="vertical-align:bottom;border:0;"> | </p>
ATagBeforeWrap = 1
}
# ACTIFSUB = 1 – указание, что для страницы имеющей подстраницы и являющейся
# «текущей» будут использованы отдельные свойства.
# linkWrap – обрамление ссылки в меню. В данном случае подгружается изображение
# минуса.
ACTIFSUB = 1
ACTIFSUB {
linkWrap = <p> <img src="fileadmin/template/images/minus.gif" alt = "Развернуть"
style="vertical-align:bottom;border:0;"> | </p>
ATagBeforeWrap = 1
}
NO.linkWrap = <p> | </p>
SPC = 1
SPC.allwrap = <p> | </p>
}
681449347
8
# Создание объекта для отображения 2го уровня меню. И задание стиля для ссылок
# данного подменю
page.7.2 = TMENU
page.7.2.noBlur = 1
page.7.2.NO.linkWrap = <div style="margin-left: 20px; margin-top: 5px; font-size:11px;"> |
</div>
Код шаблона phpContent: (страница погоды)
# Страница не кешируется. Необходимо для функ-ия
# данного способа подключения php скриптов.
config.no_cache = 1
# Убираем отображение контента для данной страницы.
page.10 = TEXT
page.10.value =  
page.28 = TEXT
page.28.value = <div class="main23">
# Создаем объект типа 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 = </div>
.
Сам php-скрипт для корректной работы должен быть приведен к виду.
<?php
Class ClassName {
function func1()
{
……………..
return $result;
}
}
$content = ClassName:: func1();
?>
Если обобщить:
1) Должен быть класс и функция в нем, которая выводит что либо с
помощью return.
2) Должна быть определена переменная $content, которая и будет
выводиться.
3) Расширение файла должно быть .inc(.txt)
681449347
9
Download