Filter

Wie sich eine Sammlung an Dokumenten durch Taxonomien beziehungsweise Dokumentenvariablen filtern lässt.

Viele Template-Funktionen des Qgoda Plug-ins erwarten als Argument Filter. Mit Filtern lassen sich Gruppen von Dokumenten oder auch einzelne Dokumente beschreiben.

Inhaltsverzeichnis

Filter sind Schlüssel-Wert-Paare

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.

Defekte und mehrdeutige Links

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().

Bedingungen

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.

Filtering Results are Cached

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.

Can Filters Be ORed Together?

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.