Viele Template-Funktionen des Qgoda Plug-ins erwarten als Argument Filter. Mit Filtern lassen sich Gruppen von Dokumenten oder auch einzelne Dokumente beschreiben.
Ein typischer Filter sieht so aus:
Diese Seite auf [Englisch]([% q.link(name=asset.name lingua='en') %]) lesen.
Der obige Template-Schnipsel ruft die Funktion q.llink() mit zwei
benannten Argumenten name und lingua auf.
Alle diese Argumente spezifizieren Bedingungen, die erfüllt sein müssen, damit
ein Dokument den Filter passieren kann. Im obigen Fall sind dies Dokumente,
deren Variable name den gleichen Wert hat wie beim aufrufenden Dokument.
Weiterhin muss die Variable lingua den hartkodierten Wert en haben.
Wird ein Filter verwendet, der keinerlei Ergebnisse produiert, wird dies normalerweise mit einer Warnung auf der Konsole quittiert. Das Gleiche passiert bei Methoden, die normalerweise exakt einen Treffer liefern sollen, wenn mehr als ein passendes Dokument gefunden wird.
Solche Funktionen sind q.link(), q.anchor() und q.xref() und ihre
mehrsprachigen Äquivalente q.llink(), q.lanchor() und q.lxref().
Die Prüfung auf Gleichheit ist die Default-Bedingung, aber es stehen noch weitere, mit einer geringfügig komplizierteren Syntax zur Verfügung:
Siehe die [API-Dokumentation]([% q.link(name='api-docs') %]).
Siehe die [API-Dokumentation]([% q.link(name=['eq', 'api-docs']) %]).
Das zweite Beispiel verwendet die erweiterte Syntax. Statt eines einzelnen Wertes wird eine Liste von zwei Werten angegeben. Der erste ist der Vergleichs- Operator und der zweite der Wert.
Tatsächlich produzieren beide Zeilen exakt das gleiche Ergebnis, weil
eq der Default-Operator ist.
Die erweiterte Syntax sieht also folgendermaßen aus:
VARIABLE=[OPERATOR, WERT]
eqLiefert wahr, wenn die Werte als Zeichenkette gleich sind.
neLiefert wahr, wenn die Werte als Zeichenkette nicht gleich sind.
geLiefert wahr, wenn der Wert der Variablen im anderen Dokument als Zeichenkette größer gleich dem angegebenen Wert ist. "bbb" ist zum Beispiel als Zeichenkette größer als "aaa".
gtLiefert wahr, wenn der Wert der Variablen im anderen Dokument als Zeichenkette größer als der angegebene Wert ist. "bbb" ist zum Beispiel als Zeichenkette größer als "aaa".
leLiefert wahr, wenn der Wert der Variablen im anderen Dokument als Zeichenkette kleiner gleich dem angegebenen Wert ist. "aaa" ist zum Beispiel als Zeichenkette kleiner als "bbb".
ltLiefert wahr, wenn der Wert der Variablen im anderen Dokument als Zeichenkette kleiner als der angegebene Wert ist. "aaa" ist zum Beispiel als Zeichenkette kleiner als "bbb”.
ieqWie eq, aber ignoriert Groß- und Kleinschreibung beim Vergleich.
ineWie ne, aber ignoriert Groß- und Kleinschreibung beim Vergleich.
igeWie ge, aber ignoriert Groß- und Kleinschreibung beim Vergleich.
igtWie gt, aber ignoriert Groß- und Kleinschreibung beim Vergleich.
ileWie le, aber ignoriert Groß- und Kleinschreibung beim Vergleich.
iltWie lt, aber ignoriert Groß- und Kleinschreibung beim Vergleich.
==Returns true if the value of the variable in the other document is numerically equal to the value specified.
For example 1.0 and 1 and +1 are all numerically equal.
!=Returns true if the value of the variable in the other document is numerically not equal to the value specified.
>=Returns true if the value of the variable in the other document is numerically greater or equal than the value specified.
>Returns true if the value of the variable in the other document is numerically greater than the value specified.
<=Returns true if the value of the variable in the other document is numerically less or equal than the value specified.
<Returns true if the value of the variable in the other document is numerically less than the value specified.
=~Returns true if the value of the variable in the other document matches the value specified as a Perl regular expression.
!~Returns true if the value of the variable in the other document does not match the value specified as a Perl regular expression.
containsReturns true if the value of the variable in the other document is an array (a list) the value specified is contained in that array.
icontainsLike contains but case is ignored for the comparison.
Applying filters to a large set of documents is potentially expensive. However, you pay the price only once. All results of filtering operations are cached in memory, even when you shuffle the order of the conditions in the filter.
No.
This is a deliberate design decision that favors a simple and comprehensible syntax over flexibility. If you need a logical or, you can achieve that by template code yourself. Template Toolkit gives you all the operators you need.
Besides, it seems to be hard to find a use case for ORed conditions.