prosdo.ru
добавить свой файл
1

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


О шаблонах в TYPO3 1

Управление шаблонами 1

Анализ шаблонов основного сайта shgpi.edu.ru 3

Код шаблона 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 данной страницы.



Рассмотрим появившуюся форму управления шаблоном.


  1. Вкладка General – на ней определяется название шаблона, заголовок сайта и собственно его отображение и описание шаблона.

Самые важные поля на данной вкладке – Constants
и Setup.

Constants -собственно, раздел объявления констант, которые можно использовать в поле Setup.

Setup – здесь и задаются все настройки отображения сайта( Различные условия, параметры, файлы и т.д.)

  1. Вкладка Options – здесь определяются параметры наследования у данного шаблона. Раздел Clear – поставленная галочка уберет все унаследованные от старницы родителя опции в разделах Setup или Constants, ну и заодно определяется – будет ли этот шаблон считаться «корневым» - «rootlevel» (если да, то меню будет состоять только из страниц этого раздела).

  2. Вкладка Includesздесь подключаются, так называемые «статические шаблоны» - шаблоны CMS или модулей в которых заданы их параметры отображения. В корневом шаблоне сайта необходимо обязательно добавить – в разделе Include static - content(default), и в разделе Include static (from extensions) - CSS Styled Content TYPO3 (css_styled_content). Если эти статические шаблоны не подключить - никакой контент в самодельных шаблонах выводиться не будет.

  3. Также, для корректной работы модуля 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


Основные отличия данного шаблона:

  1. Он неполный – он наследует корневой шаблон и перегружает несколько его объектов.

  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 = | ><br> <br> page.headerData.1.2 = TEXT<br> <br> page.headerData.1.2.data = fullRootLine : 0, title<br> <br> page.headerData.1.2.wrap = | ><br> <br> page.headerData.1.3 = TEXT<br> <br> page.headerData.1.3.data = fullRootLine : 1, title<br> <br> 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();

?>


Если обобщить:


  1. Должен быть класс и функция в нем, которая выводит что либо с помощью return.

  2. Должна быть определена переменная $content, которая и будет выводиться.

  3. Расширение файла должно быть .inc(.txt)