Условная логика
Вложение логических тегов
Под термином вложение понимается размещение тегов внутри блоков, размеченных другими тегами. Логические теги можно свободно вкладывать, по при этом необходимо тщательно следить за соответствием открывающих и закрывающих тегов.
В некоторых случаях вложение логических тегов требуется для проверки нескольких условий с одной переменной. Это связано с тем, что имя переменной может встречаться в логическом теге всего один раз.
В листинге 13.15 приведен пример вложения нескольких логических тегов в один тег <if> верхнего уровня.
Листинг 13.15. Вложение логических тегов.
<lхр> <if answer> <strong>You have supplied an answer!</strong><br /> <if answer="12"> Your answer is correct!<br /> </lf> <ifnot answer="12"> Your answer of <putvar name="answer"> .though, is incorrect.<br /> </ifnot> <if answer="12" cheatcode> You appear to be cheating, however. </if> </if> </lxp>
В листинге 13.15 первый тег <if> проверяет, задано ли значение аргумента answer. Если значение отсутствует, весь внутренний блок не обрабатывается.
Второй тег <if> проверяет, содержит ли переданный аргумент answer значение 12. Если условие выполняется, блок тега <if> обрабатывается, а если нет – не обрабатывается.
Следующий тег <ifnot> проверяет, отличен ли аргумент answer от 12. В этом случае обрабатывается внутренний блок тега <ifnot>.
Наконец, последний тэг <if> в листинге 13.15 проверяет, содержит ли аргумент answer значение 12 и был ли при этом передан аргумент cheatcode. Если аргумент равен 12, а переменная cheatcode существует, обрабатывается блок последнего тега <if> (в данном примере он просто выводит сообщение).
Теги < ifcookie> и <ifnotcookie>
Теги <ifcookie> и <ifnotcookie> аналогичны тегам <if> и <ifnot>, с одним принципиальным различием: при проверке используются не переменные, хранимые в памяти, а файлы cookie, хранимые в некотором домене и доступные через браузер.
В листинге 13.16 блок LXP строит персональное приветствие для пользователя, если в его браузере хранится cookie с именем username.
Листинг 13.16. Теги <ifcookie> и <ifnotcookie>.
<lхр> <ifcookie username> Welcome back. <putcookie name="username">.<br /> </ifcookie> <ifnotcook1e username> <include src="login.php" /> </ifnotcookie> </lxp>
Если cookie с именем username не существует, выводится стандартная страница для ввода пользовательских данных, реализованная в документе РНР. Документ воспроизводится посредством подзапроса Apache (см. подраздел "Включение внешних источников данных" в разделе "Включение данных").