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