• Иллюстрированный самоучитель по 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, чтобы сообщить об этом редактору.