Условная разметка

Пожалуйста, экспериментируйте в песочнице!

авторам, администраторам (продвинутый)

Использование директивы (:if:)

Директива (:if:) позволяет включать или выключать обработку части страницы.

Общая форма этой директивы такая:

 (:if условие параметр:) текст (:ifend:)

где "условие" - это проверяемое условие (описано ниже), а "параметр" - это параметр или аргумент условия. Если условие "истинно"(TRUE), то текст будет включен, а если "ложно"(FALSE) - исключен из обработки страницы.

Встроеные условия включают:

 

(:if name ИМЯСТРАНИЦЫ:)  -  текущая страница называется "ИМЯСТРАНИЦЫ"
(:if group ИМЯГРУППЫ:)  -  текущая группа называется "ИМЯГРУППЫ"
(:if auth УРОВЕНЬ:)  -  пользователь имеет авторизационный "УРОВЕНЬ", где УРОВЕНЬ может быть: read, edit, upload, attr или admin
(:if authid:)  -  пользователь авторизован
(:if true:)  -  всегда включает обработку текста
(:if false:)  -  всегда выключает текст (тоже что и коментарий)
(:if attachments:)  -  у текущей страницы есть присоеденённые файлы
(:if date ДАТА:)  -  настоящая дата совпадает с ДАТА
(:if date ДАТА..:)  -  настоящая дата совпадает с ДАТА или позднее (неограничено)
(:if date ДАТА1..ДАТА2:)  -  нынешняя дата в диапазоне между ДАТА1 и ДАТА2 (включительно)

все даты в формате гггг-мм-чч или ггггммчч

(:if enabled VAR:)  -  PHP переменная VAR истинна (==true)
(:if equal СТРОКА1 СТРОКА2:)  -  СТРОКА1 совпадает с СТРОКА2
(:if match РЕГВЫР:)  -  имя текущей страницы подходит под регулярное выражение РЕГВЫР
(:if exists ИмяСтраницы:)  -  страница ИмяСтраницы существует

Также работают обратные формы условий:

 

(:if !attachments:)  -  у страницы нет добавленых файлов
 
(:if ! name ИмяСтраницы:) текущая страница не называется "ИмяСтраницы"
(:if name -ИмяСтраницы :)
(:if name !ИмяСтраницы :)

Любая директива (:if:) автоматически прерывает предыдущую, так что можно легко сделать выбор варианта(без вложености):

 

(:if auth read:)* Вам дозволено читать
(:if auth edit:)* Вам дозволено редактировать
(:if auth upload:)* Вам дозволено закачивать файлы
(:ifend:)

Использование символов обобщения ('*' и '?')

Знак звезда (*) - это обощение обозначающее любую последовательность символов, в том числе и пусто, которая может быть расположена на его месте.
А знак вопроса (?) - это обобщение обозначающее любой символ на его месте.

Символы обобщения (* и ?) используются в условной разметке:

 

(:if name PmCal.2005* :)  -  текущая страница принадлежит группе PmCal и её имя начинается с 2005
(:if group PmWiki* :)  -  имя группы страницы начинается с PmWiki
(:if name Profiles.*,-Profiles.Profiles :)  -  страница в группе Profiles, но не Profiles.Profiles

Смешаные условия

Условия (определённые ранее) можно комбинировать в более сложные выражения. Для этого используется одна из трёх эквивалентных форм:

 

(:if expr ВЫРАЖЕНИЕ :)
(:if [ ВЫРАЖЕНИЕ ] :)
(:if ( ВЫРАЖЕНИЕ ) :)

Условия комбинируются в выражения с помощью двоичных операторов и скобок. В следующей таблице, буквами А и Б обозначаются условия или подвыражения взятые в скобки:

ВыражениеОператорРезультат "истинно"
А and БAndЕсли А и Б истинны
А or БOrЕсли А или Б истинно
А xor БXorЕсли А и Б истинны, или А и Б ложны
! ANotЕсли А ложно
А && БAndЕсли А и Б истинны
А || БOrЕсли А или Б истинно

Обратите внимание, что:

  • пробелы вокруг операторов и скобок обязательны;
  • При синтаксических ошибках или непарных скобках поведение условий непредсказуемо.

Отсюда запись:

 

(:if expr auth admin || auth attr || auth edit :)
[[Logout -> {$Name}?action=logout]]
(:if:)

предлагает logout ссылку только когда авторизация с правами больше, чем 'read'(просмотр).

администраторам (продвинутый)

Добавление новых условий

Смотри Cookbook:ConditionalMarkupSamples.

<< InterMap ссылки | Документация | Списки страниц >>

Перевод страницы PmWiki.ConditionalMarkup - Оригинал перевода PmWikiRu.ConditionalMarkup - Backlinks
PmWikiRu.ConditionalMarkup: редакция от September 10, 2011, at 12:48 PM MDT
PmWiki.ConditionalMarkup: редакция от August 30, 2019, at 05:43 AM MDT