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=&nbsp; :></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:> с одинаковым именем в одном контейнере - тоже штатная ситуация. Это позволяет, например, вывести навигационное меню и вверху, и внизу страницы. Соответствующий блок будет каждый раз проинтерпретирован, так что выводиться может и разная информация. Так задумано.

16 октябрь 2007 13:44