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 Parmeter:) body (:ifend:) (:if Bedingung Parmeter:) body (:else:) body (:ifend:) (:if Bedingung Parmeter:) body (:elseif Bedingung Parameter:) body (:ifend:) (:if Bedingung Parmeter:) body (:elseif Bedingung Parameter:) body (:else:) body (:ifend:) |
wobei "Bedingung" eine der unten genannten zu testenden Bedingungen bezeichnet und "Parameter" einen Wert oder ein anderes Argument der Bedingung beschreibt.
Beachten Sie, dass (:if:) ohne Parameter und (:ifend:) identisch sind. Beachten Sie auch, dass (:if Bedingung:) automatisch eine vorhergehende Bedingung beendet. Wegen verschachtelter Bedingungen in mehreren Ebenen siehe verschachtelte Bedingungen.
Die folgenden Bedingungen sind eingebaut:
(:if name SEITENNAME:)SEITENNAME" oder "GRUPPENNAME.SEITENNAME" (von Groß/Kleinschreibung unabhängig)
(:if group GRUPPENNAME:)GRUPPENNAME" (von Groß/Kleinschreibung unabhängig)
(:if action AKTION:)AKTION" (von Groß/Kleinschreibung abhängig), z. B. View oder Edit
(:if auth LEVEL SEITENNAME:)LEVEL" wobei der LEVEL : read, edit, upload, attr oder admin sein kann; SEITENNAME ist optional. (:if auth @readers,@editors:)(:if authid:)$AuthId-Variable setzt.
(:if enabled InvalidLogin:)(:if true:)(:if false:)(:if attachments FILENAMES PAGENAME:)PAGENAME hat einen Anhang oder mehrere Anhänge unter den angegebenen. PAGENAME kann weggelassen werden, dann wird die aktuelle Seite untersucht.FILENAMES bezeichnen einen Anhang wie "bild1.jpg" oder Anhangsmuster, getrennt durch Kommata, wie "bild*.jpg,*.png", wobei der Stern für eine beliebige Anzahl weiterer Zeichen steht. Fehlt der Parameter, zählt jeglicher Anhang (d. h. "*").Seitenname ist nicht angegeben, wird die Bedingung auf die Hauptseite angewendet.(:if attachments *.png,*.gif Groupname.PageName:) Beachten Sie: Keine Anführungszeichen um die Dateinamen.
In den folgenden "if date"-Beispielen gilt:
DATE kann Jahr-Monat sein. Jahr-Monat-Tag ist optional.
VALUE kann ein Datum sein, muss aber mit von PHP unterstützten Datum- und Zeitformaten erkannt werden können.
DATE (oder DATE1 und DATE2 unten) haben ein etwas strengeres Format, das keine Leerzeichen enthalten darf. Jedes Leerzeichen in DATE1 oder DATE2 verursacht unvorhersagbare Ergebnisse.
VALUE) weggelassen wird
yyyy-mm-dd oder yyyymmdd oder yyyymmddThhmm (Beachten Sie das "T" zwischen dem Datum und der Uhrzeit, und sehen Sie sich die Anmerkung oben zu VALUE an)
DATE1) oder folgenden Leerzeichen (zusammen mit DATE2) haben.
(:if date DATE VALUE:)VALUE im Bereich von DATE liegt.
(:if date DATE1.. VALUE:)VALUE (oder das aktuelle Datum, wenn VALUE fehlt) gleich DATE1 oder später ist (unbegrenzt)
(:if date ..DATE2 VALUE:)VALUE (oder das aktuelle Datum, wenn VALUE fehlt) gleich DATE2 oder früher ist (unbegrenzt)
(:if date DATE1..DATE2 VALUE:)VALUE (oder das aktuelle Datum, wenn VALUE fehlt) zwischen DATE1 und DATE2 (inklusive) liegt
(:if enabled VAR:)VAR existiert und nicht falsch ist
(:if enabled AuthPw:)(:if equal STRING1 STRING2:)STRING1 = STRING2; benutzen Sie Anführungszeichen, wenn die Zeichenkette oder Zeichenkettenvariable Leerzeichen enthält, z. B. "MY STRING"
(:if match REG_EXPRESSION:)(:if match .(day..?|maps)$:)
(:if exists PAGENAME:)pagename" oder "groupname.pagename" existiert (Groß/Kleinschreibung wird nicht unterschieden)(:if exists p1,p2,meineGruppe.*:) ist wahr, wenn wenigstens eine unter den Seiten "p1" oder "p2" oder unter jenen in der "meineGruppe"-Gruppe existiert.
(:if ontrail WikiTrailPage ThisPage:)ThisPage in einer Liste ist, die als trail auf der Seite "WikiTrailPage" benutzt wird
Die "name"- und "group"-Bedingungen arbeiten sogar in einer inkludierten Seite, da "name" und "group" immer die aktuell ausgegebene Seite überprüfen, und nicht die Seite, in der die Auszeichnung enthalten ist (Quelltext).
In einigen Fällen, wo eingebaute Bedingungen einen Parameter haben, können die Parameter mit Hilfe eines Kommas aufgezählt werden, siehe
(:if name Name1,Name2,-Name3:)
(:if group -Group1,Group2,Group3:)
(:if action browse,edit,diff:)
(:if exists Page1,Group.*:)
Negierte Formen der Bedingungen funktionieren ebenfalls:
(:if !attachments:)(:if ! name PAGENAME:)(:if name -PAGENAME :)PAGENAME"
(:if group -GROUPNAME1,-GROUPNAME2 :)GROUPNAME1" noch "GROUPNAME2"
Beachten Sie, dass jedes (:if cond:) automatisch das vorhergehende beendet, 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:)
|
Die folgenden beiden Beispiele sind identisch in ihrer Wirkung:
(:if cond1:) cond1 ist waht(:if cond2:) cond2 ist wahr (:ifend:)
(:if cond1:) cond1 ist wahr (:ifend:)(:if cond2:) cond2 ist wahr (:ifend:)
Bedingungen können seit der Version 2.2.beta66 verschachtelt werden. Für verschachtelte Bedingung müssen Sie die if und die korrespondierenden else/ifend nummerieren.
(:if cond1:)
cond1 ist wahr
(:if2 cond2:)
cond1 und cond2 sind wahr
(:else2:)
cond1 ist wahr, cond2 ist falsch
(:if2end:)
(:else:)
cond1 ist falsch, Test auf cond2 wurde ignoriert
(:ifend:)
|
Für eine bessere Lesbarkeit wurden Einrückungen vorgenommen.
Das Zeichen * kann als Platzhalter (Wildcard/Joker) genutzt werden, um jedes beliebige Zeichen keinmal, einmal oder mehrfach zu repräsentieren.
Das Zeichen ? kann als Platzhalter (Wildcard/Joker) genutzt werden, um ein beliebiges Zeichen exakt einmal zu repräsentieren.
Die Platzhalterzeichen (* und ?) können auch mit den name- und group-Bedingungen benutzt werden:
(:if name PmCal.2005* :)(:if group PmWiki* :)(:if name Profiles.*,-Profiles.Profiles :)Profiles, ist aber nicht Profiles.Profiles
Die bedingte Auszeichnung ((:if :)-Direktive) wird intensiv mit PageList-Vorlagen genutzt.
Anwendung mit Seiten Variablen:
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
Seiten-Text-Variablen (STVs), seitenspezifischen Variablen (SVs) und Markup-Expressions können in Bedingungen verwendet werden. Sie werden zugewiesen und ausgewertet, bevor die Bedingungen ausgewertet werden.
Bedingungen (wie vorher definiert) können zu komplexeren bedingten Ausdrücken kombiniert werden, in dem eine der drei folgenden untereinander äquivalenten 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 oder beide WAHR sind. |
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 A oder B WAHR ist oder beide WAHR sind. |
Beispiel
(:if [ name SomePage and group SomeGroup ]:) entspricht (:if name SomeGroup.SomePage:) |
Wichtige Hinweise:
Das Folgende ist folglich 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!
Ein häufiger Anwendungsfall für komlexere 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)
Siehe das Kochbuch-Rezept Cookbook:ConditionalMarkupSamples (nur auf Englisch verfügbar).
Siehe auch spezielle Verweise für die Benutzung von {*$Variablen}.
Übersetzung von PmWiki.ConditionalMarkup, Originalseite auf PmWikiDe.ConditionalMarkup — Backlinks
| Zuletzt geändert: | PmWikiDe.ConditionalMarkup | am 20.05.2025 |
| PmWiki.ConditionalMarkup | am 27.11.2025 |