Autoren (Fortgeschrittene) und Administratoren
(deutsche Übersetzung der Seite PmWiki.ConditionalMarkup, Stand 2008-03-17)
Anwendung der (:if:) Direktive
Die (:if:) Direktive erlaubt es, Teile einer Seite bei der Darstellung zu berücksichtigen oder auszuschließen. Der grundsätzliche Aufbau der (:if:)
Direktive ist
(:if Bedingung parm:) body (:ifend:)
(:if Bedingung parm:) body (:else:) body (:ifend:)
(:if Bedingung parm:) body (:elseif Bedingung parm:) body (:ifend:)
wobei "Bedingung" eine der unten genannten zu testenden Bedingungen bedeutet und "parm"
einen Wert oder ein anderes Argument der Bedingung beschreibt.
Bedingungen lassen sich nicht verschachteln.
Die folgenden Bedingungen sind eingebaut:
(:if name PAGENAME:)
| -
| aktueller Name Seite ist "PAGENAME "
|
(:if group GROUPNAME:)
| -
| aktueller Name der Gruppe ist "GROUPNAME "
|
(:if auth LEVEL PAGENAME:)
| -
| Anwenderautorisierung - d.h. "seine Berechtigung" - entspricht einem "LEVEL " wobei der LEVEL : read , edit , upload , attr oder admin sein kann; PAGENAME ist optional.
|
(:if authid:)
| -
| aktueller Anwender ist authentifiziert - d.h. hat sich durch "login" ausgewiesen - um diese Bedingung anwenden zu können, muss das Wiki AuthUser aktiviert haben oder einen anderen Mechanismus, der die $AuthId Variable setzt.
|
(:if enabled InvalidLogin:)
| -
| Username and Passwort nicht authentifiziert
|
(:if true:)
| -
| das Folgende immer interpretieren
|
(:if false:)
| -
| schließt das Folgende von einer Interpretation aus (wie Kommentar)
|
(:if attachments:)
| -
| aktuelle Seite hat Anhänge
|
(:if date DATE VALUE:)
| -
| DATE kann sein: year-month. year-month-day ist optional.
Bedingung ist wahr, wenn VALUE innerhalb DATE (Für VALUE wird "now" oder "today" angenommen. VALUE kann auch weggelassen werden, wie in den folgenden Beispielen.)
|
(:if date DATE..:)
| -
| wahr, wenn das aktuelle Datum = DATE oder später (unbegrenzt)
|
(:if date DATE1..DATE2:)
| -
| wahr, wenn das aktuelle Datum zwischen DATE1 bis DATE2 (inklusive) liegt
Datumangabe sind im standard format yyyy-mm-dd or yyyymmdd
Hinweis: die ".." dürfen keine führenden oder folgenden Leerzeichen haben.
|
(:if enabled VAR:)
| -
| wahr, wenn PHP VAR gesetzt
|
(:if enabled AuthPw:)
| -
| wahr, wenn der Anwender irgend ein Passwort während der aktuellen Browser Sitzung eingegeben hat.
- Das bedeutet nicht, dass der Anwender das korrekte Passwort eingegeben hat.
|
(:if equal STRING1 STRING2:)
| -
| wahr, wenn STRING1 = STRING2 ; benutze Anführungszeichen, wenn die Zeichenkette oder Zeichenkettenvariable Leerzeichen enthält, z.B. "MY STRING"
|
(:if match REG_EXPRESSION:)
| -
| wahr, wenn der aktuelle Seitenname dem regulären Ausdruck entspricht
|
(:if exists PAGENAME:)
| -
| wahr, wenn die Seite pagename existiert
|
(:if action ACTION:)
| -
| wahr, wenn die Aktion ?action=ACTION (edit, print, ...) aktuell erlaubt ist. Um zu prüfen, welche Aktion aktuell angefordert wurde, benutze (:if equal {$Action} ACTION:) .
|
(:if ontrail WikiTrailPage ThisPage:)
| -
| wahr, wenn ThisPage in einer Liste ist, die als trail auf WikiTrailPage benutzt wird
|
Die "name" und "group" Bedingungen arbeiten sogar in einer inkludierten Seite, da die "name" and "group" immer die aktuell ausgegebene Seite überprüfen, und nicht die Seite in der die Auszeichnung enthalten ist (Quelltext).
Negierte Formen der Bedingungen funktionieren ebenfalls:
(:if !attachments:)
| -
| diese Seite hat keine Anhänge
|
|
(:if ! name PAGENAME:)
|
| aktuelle Seite heist NICHT "PAGENAME "
|
(:if name -PAGENAME :)
|
|
(:if name !PAGENAME :)
|
Jedes (:if:)
beendet automatisch das vorhergehende, daher können Auszeichnungen einfach durchgeprüft werden (und sind nicht verschachtelt):
(:if enabled AuthPw:)
| * Du hast ein Passwort eingegeben
|
(:if auth read:)
| * Du darfst lesen
|
(:if auth read Group.Page:)
| * Du darfst die Group.Page lesen
|
(:if auth edit:)
| * Du darfst bearbeiten
|
(:if auth upload:)
| * Du darfst Dateien hochladen
|
(:ifend:)
|
Nutzung von Platzhaltern (Wildcard)
Das Zeichen *
kann als Platzhalter (Wildcard) genutzt werden, um jedes beliebige Zeichen, keinmal, einmal or mehrfach zu repräsentieren.
Das Zeichen ?
kann als Platzhalter (Wildcard) genutzt werden, um ein beliebiges Zeichen exakt einmal zu repräsentieren.
Die Platzhalter Zeichen (*
und ?
) können auch mit den name und group Bedingungen benutzt werden:
(:if name PmCal.2005* :)
| -
| aktuelle Seite gehört in die Gruppe PmCal und beginnt mit 2005
|
(:if group PmWiki* :)
| -
| aktuelle Seite gehört in die Gruppe PmWiki oder in eine Gruppe, die mit PmWiki beginnt
|
(:if name Profiles.*,-Profiles.Profiles :)
| -
| aktuelle Seite gehört in die Gruppe Profiles aber nicht in Profiles.Profiles
|
Bedingte Auszeichnung wird extensiv mit PageList-Vorlagen genutzt.
Anwendung mit Seiten Variablen:
= aktuelles Element
< voriges Element
> nächstes Element
Bedingungen zur Strukturierung von pagelist Ausgaben:
(:if equal {<$Group}:)
Am Anfang der Liste
(:if equal {>$Group}:)
Am Ende der Liste
(:if ! equal {=$Group} {<$Group}:)
Erstes Element der Gruppe
(:if ! equal {=$Group} {>$Group}:)
Letztes Element der Gruppe
Kombinieren von Bedingungen
Bedingungen (wie vorher definiert) können zu komplexeren bedingten Ausdrücken kombiniert werden, in dem eine der drei folgenden Formen benutzt werden:
(:if expr EXPRESSION :)
(:if [ EXPRESSION ] :)
(:if ( EXPRESSION ) :)
Bedingungen werden mit Booleschen Operatoren und Klammern zu Ausdrücken verbunden. In der folgenden Tabelle sind A und B entweder reguläre Bedingungen oder geklammerte sub-Ausdrücke regulärer bedingungen:
Expression | Operator | Result |
A and B | And | WAHR, wenn sowohl A als auch B WAHR sind. |
A or B | Or | WAHR, wenn entweder A oder B WAHR ist. |
A xor B | Xor | WAHR, wenn entweder A oder B WAHR ist, aber nicht beide. |
! A | Not | WAHR, wenn A nicht WAHR ist. |
A && B | And | WAHR, wenn sowohl A als auch B WAHR sind. |
A || B | Or | WAHR, wenn entweder A oder B WAHR ist. |
Beispiel
(:if [ name SomePage and group SomeGroup ]:) entspricht (:if name SomeGroup.SomePage:)
Hinweis:
- Leerzeichen um Operatoren und Klammern sind erforderlich.
- Bei unpaariger Klammersetzung gibt es keine spezifischen Fehlerhinweise.
- Bei verschachtelten Ausdrücken werden runde Klammer (keine eckigen) benutzt.
Das Folgende ist insofern ein möglicher Weg, eine Bedingung zu formulieren, durch die der folgende Inhalt nur angezeigt wird, wenn der Nutzer entweder Administrator ist oder wenn er eingeloggt ist und das angegebene Datum abgelaufen ist.
(:if [ auth admin || ( authid && date 2006-06-01 ) ] :)
Das Verschachteln mit Hilfe eckiger Klammern funktioniert wie erwartet nicht:
(:if [ auth admin || [ authid && date 2006-06-01 ] ] :)
Hinweis: Dies funktioniert nicht!
Eine häufiger Anwendungsfall für komlexeren Tests sind Ausdrücke wie
(:if expr auth admin || auth attr || auth edit :)
[[Logout -> {$Name}?action=logout]]
(:ifend:)
wodurch ein Logout-Link genau dann angezeigt wird, wenn admin-, attr- oder edit-Rechte vorhanden sind.
Administratoren (Fortgeschrittene)
Neue Bedingungen kreiern
Siehe das Kochbuch-Rezept Cookbook:ConditionalMarkupSamples (nur auf Englisch verfügbar).
Siehe auch Seitenvariablen für die Benutzung von {*$Variablen}.
<< InterMap Präfixe | Dokumentations-Index | Seitenspezifische Variablen >>