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]
eq
Liefert wahr, wenn die Werte als Zeichenkette gleich sind.
ne
Liefert wahr, wenn die Werte als Zeichenkette nicht gleich sind.
ge
Liefert 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".
gt
Liefert 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".
le
Liefert 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".
lt
Liefert 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”.
ieq
Wie eq
, aber ignoriert Groß- und Kleinschreibung beim Vergleich.
ine
Wie ne
, aber ignoriert Groß- und Kleinschreibung beim Vergleich.
ige
Wie ge
, aber ignoriert Groß- und Kleinschreibung beim Vergleich.
igt
Wie gt
, aber ignoriert Groß- und Kleinschreibung beim Vergleich.
ile
Wie le
, aber ignoriert Groß- und Kleinschreibung beim Vergleich.
ilt
Wie 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.
contains
Returns true if the value of the variable in the other document is an array (a list) the value specified is contained in that array.
icontains
Like 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.