Иллюстрированный самоучитель по PostgreSQL

Условная логика

Простейший способ условной генерации данных в LXP основан на встроенной поддержке тегов условной логики. Условные теги позволяют скрывать или активизировать целые блоки посредством проверки условий для переменных и cookie. К числу основных условных тегов LXP относятся теги: <if>, <ifnot>, <ifcookie>, <ifnotcookie>, <else>, <elseif> и <elseifnot>.

Теги <if> и <ifnot> работают с переменными LXP (или компонентами объектов), тогда как теги <ifcookie> и <ifnotcooki e> работают с файлами cookie текущего домена. Иначе говоря, теги <if> и <ifcookie> обладают одинаковыми логическими функциями, различаются только проверяемые исходные данные.

Тег <else> имеет более общий характер и реализует проверку инвертированных условий для тегов, упоминавшихся выше. Теги <elseif> и <elseifnot> в действителыюсти всего лишь обеспечивают сокращенную запись для вложения тегов <if> и <ifnot> в блоки <else>.

Теги <if> и <ifnot>

Без атрибутов теги <if> и <ifnot> не выполняют никаких полезных функций. Однако с правильно указанными атрибутами они позволяют легко и быстро помечать блоки разметки и обеспечивать их отображение при определенных условиях.

Тег <if>

Тег <if> сравнивает свои атрибуты с переменными, имена которых соответствуют именам атрибутов. Если значение заданного атрибута совпадает со значением переменной, блок разметки между <if> и парным тегом </if> обрабатывается LXP. В противном случае весь блок (от <if> до </if>) полностью игнорируется вместе со всей разметкой.

В зависимости от типа логической проверки в тег <if> включается имя атрибута, пара "имя/значение" или серия таких пар.

Если указано только имя атрибута (например, <iftest>), LXP проверяет только существование каких-либо символов, присвоенных переменной с указанным именем. Если переменная содержит пустое значение (или вообще не существует), проверка завершается неудачей, а соответствующий блок исключается из обработки. Если значение найдено, блок обрабатывается обычным образом.

При наличии одной или нескольких пар атрибутов каждое значение сравнивается со значением переменной с указанным именем. Если тег содержит более одного атрибута, то для совпадения в целом должны совпадать осе частичные условия. Только в этом случае соответствующий блок будет нормально обработан.

В листинге 13.13 тег <if> проверяет существование значения переменной с именем name, а также проверяет, содержит ли переменная access значение 1.

Листинг 13.13. Использование тега <if>.

<lхр>
<if name access="l"> <strong>Success!</strong><br />
A <em>name</em> is set .and <em>access</em> is set to l.<br />
</if> <
/lxp>

Тег <ifnot>

Тег <ifnot> во всех отношениях противоположен тегу <if>. Например, при перечислении нескольких атрибутов блок <ifnot> обрабатывается лишь в том случае, если не выполняется ни одного из проверяемых условий.

В листинге 13.14 тег <ifnot> убеждается в том, что переменная с именем error не содержит значения, а также проверяет, что переменная access не равна 0.

Листинг 13.14. Использование тега <ifnot>.

<lхр>
<ifnot error access="0"> <strong>Success!</strong><br />
An <em>error</em> is not set .and <em>access</em> is not set to 0.<br />
</ifnot>
</lxp>

Примечание
В одном теге LXP не допускается определение двух атрибутов с одинаковыми именами (то есть тег <ifnot access="0" access="2"> неправилен). Следовательно, проверка двух условий для одной переменной должна производиться двумя отдельными тегами
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.