Пожалуйста, экспериментируйте в песочнице!
 авторам, администраторам (продвинутый)
Использование директивы (: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: редакция от December 17, 2022, at 09:49 AM