Пожалуйста, экспериментируйте в песочнице!
авторам, администраторам (продвинутый)
Использование директивы (: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 06:48 PM
PmWiki.ConditionalMarkup: редакция от August 28, 2020, at 10:30 AM