Начальная страница

Николай Жарких (Киев)

Персональный сайт

?

Условные смеретеги

Условные смеретеги подобны условным операторам языков программирования: они проверяют определенные условия и в зависимости от результатов генерируют (не генерируют) определенный код.

CondAttr

Модуль: smeretags/substfields.php (доступен по умолчанию)

Параметры: AttrName SmerekaValue.

Назначение: возвращает обязательный параметр SmerekaValue, если контекстная вершина имеет атрибут с именем AttrName (этот параметр также является обязательным). Если вершина не имеет такого атрибута, возвращается пустая строка.

Если перед именем параметра стоит ! (восклицательный знак), действие условия инвертируется: значение SmerekaValue возвращается в случае, когда вершина не имеет такого атрибута; пустая строка возвращается, когда вершина имеет атрибут с именем AttrName.

Пример вызова: <Smereka1 Func="CondAttr" AttrName="Author">Автор: <Smereka Func="GetNodeAttr" AttrName="Author" /><Smereka1>

Пример результата:

Автор: А.С.Пушкин [в предположении, что вершина имеет атрибут Author]

[пустая строка – в предположении, что вершина не имеет атрибута Author]

Если бы мы ограничились только кодом Автор: <Smereka Func="GetNodeAttr" AttrName="Author" />, метка Автор: выводилась бы всегда, даже когда автор не задан. Благодаря условному смеретегу мы можем ее спрятать, когда она не нужна.

Пример вызова: Автор: <Smereka1 Func="CondAttr" AttrName="Author"><Smereka Func="GetNodeAttr" AttrName="Author" /><Smereka1><Smereka1 Func="CondAttr" AttrName="!Author">не определен<Smereka1>

Пример результата:

Автор: А.С.Пушкин [в предположении, что вершина имеет атрибут Author]

Автор: не определен [в предположении, что вершина не имеет атрибута Author]

Здесь использованы два условных смеретега, один из которых выполняется при наличии атрибута Author, а второй – при его отсутствии.

AttrsEq

Модуль: smeretags/cond.php

Параметры: AttrName1 AttrName2 SmerekaValue.

Назначение: возвращает обязательный параметр SmerekaValue, если контекстная вершина имеет атрибуты с именами AttrName1 и AttrName2 (эти параметры также являются обязательными) и значения этих атрибутов совпадают. Если эти условия не выполняются, возвращается пустая строка.

AttrsNotEq

Модуль: smeretags/cond.php

Параметры: AttrName1 AttrName2 SmerekaValue.

Назначение: возвращает обязательный параметр SmerekaValue, если контекстная вершина имеет атрибуты с именами AttrName1 и AttrName2 (эти параметры также являются обязательными) и значения этих атрибутов не совпадают. Пустая строка возвращается, если один или оба атрибута отсутствуют, или если их значения совпадают.

Практическая задача: есть сборник стихотворений (все вершины которого имеют одинаковый атрибут ProjectId). Внутри сборника имеются циклы стихотворений со своими подчиненными вершинами. Надо вывести навигационный блок, который обеспечивал бы перемещение между стихотворениями цикла (в случае, если стихотворение принадлежит к циклу).

Пример вызова:

<Smereka11 Module="smeretags/cond.php" Func="AttrsNotEq"
AttrName1="parent" AttrName2="ProjectId">
<h3><Smereka Func="GetDocTitle"
NodeId="1272"/>
</h3>
<p class="BodyCenter">
 <Smereka Func="SmerefRelative"
rel="prevsibl">Предыдущее стихотворение</Smereka> |
 <Smereka Func="SmerefRelative"
rel="parent">Перечень стихотворений</Smereka> |
 <Smereka Func="SmerefRelative"
rel="nextsibl">Следующее стихотворение</Smereka>
</p>
</Smereka11>

Как это работает: изюминкой является условный смеретег, который проверяет несовпадение атрибутов parent и ProjectId. Если эти атрибуты совпадают – данная вершина непосредственно подчинена корневой вершине проекта (следовательно, стихотворение не входит в состав цикла). Если эти атрибуты не совпадают – считаем, что parent указывает на вершину цикла, выводим его название и блок навигации. Чтобы увидеть эту систему в работе, можно посмотреть сборник стихов Леси Украинки «На крыльях песен».