Початкова сторінка

Микола Жарких (Київ)

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

?

Умовні смеретеги

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

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 вказує на вершину цикла, виводимо його назву та блок навігації. Щоб побачити цю систему в роботі, можна подивитись збірку віршів Лесі Українки «На крилах пісень».