Условная разметка
Пожалуйста, экспериментируйте в песочнице!
авторам, администраторам (продвинутый)
Использование директивы (: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 | Если А и Б истинны, или А и Б ложны |
! A | Not | Если А ложно |
А && Б | 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 11:48 AM Pacific
PmWiki.ConditionalMarkup: редакция от December 17, 2022, at 01:49 AM Pacific