Layout.pm
NAME
Communiware::DE::Layout - Dynamic element Layout
SYNOPSIS
<:Layout template_name :> <:Block name=name_1 :> some piece of template code <:EndBlock:> <:Block name=name_2 :> another piece of template code <:EndBlock:> <:BlockInclude name=name_3 template=template_3 :> ... <:EndLayout:>
In a template 'template_name
':
... <:Content name=name_3 default_template=template_a :> ... <td><:Content name=name_1 default_text= :></td> ...
DESCRIPTION
Динамический элемент Layout содержит несколько именованных блоков и указывает
шаблон размещения на странице их содержимого. Содержимое блока может быть как
вписано непосредственно в тело элемента (тогда для этого используется
<:Block:>
), так и взято из другого шаблона (тогда используется
<:BlockInclude:>
). Шаблон template_name
типа CONTAINER
отвечает за расположение этих блоков на странице.
У динамического элемента <:Layout:>
один обязательный параметр -
спецификация шаблона-контейнера. Если во время выполнения такого шаблона не
обнаруживается, вся конструкция будет проигнорирована. Если явно указанный
шаблон или виртуальная страница отсутствует во время компиляции - динамический
элемент <:Layout:>
(и содержащий его шаблон) не будет скомпилирован.
Подэлементы <:Block:>
и <:BlockInclude:>
имеют параметры:
- name=имя
-
По этому имени в шаблоне-контейнере динамический элемент
<:Content:>
будет ссылаться на этот блок. Если во время компиляции обнаруживается два блока с одинаковым именем, динамический элемент<:Layout:>
не будет скомпилирован. Если это будет обнаружено во время выполнения (в этом параметре подстановки времени выполнения разрешены) - внутренняя ошибка сервера. По умолчанию равен пустой строке. - clearparam=1
-
По умолчанию, если динамический элемент
<:Layout:>
находится внутри динамического элемента<:Include:>
, его блокам будут переданы атрибуты ARGN этого<:Include:>
, за исключением явно перекрытых для этого блока. Если указан аргумент clearparam, эти атрибуты переданы не будут. - ARGN=значение
-
Этот параметр будет передан блоку в качестве атрибута ARGN, перекрывая
при необходимости одноименный атрибут из объемлющего вызова
<:Include:>
.
Подэлемент <:BlockInclude:>
имеет, помимо этого, еще и обязательный
параметр template - спецификация шаблона, результат выполнения которого
будет использован в качестве содержимого.
Между блоками, разумеется, допустимы только пробелы и комментарии.
Наличие в <:Layout:>
всех блоков, предусмотренных в соответствующем
шаблоне, не обязательно, равно как и отсутствие непредусмотренных. Если
получится достаточно дешево, в отладочном режиме <:Layout:>
будет
после обработки контейнера выводить имена неиспользованных блоков.
Оповещением о недостающих блоках в отладочном режиме озаботится
<:Content:>
Наличие двух и более <:Content:>
с одинаковым именем в одном
контейнере - тоже штатная ситуация. Это позволяет, например, вывести
навигационное меню и вверху, и внизу страницы. Соответствующий блок будет
каждый раз проинтерпретирован, так что выводиться может и разная информация.
Так задумано.