Skip to main content

Filter

InhaltUm mittels Code einfacher zu filtern, gibt es die Hilfsklasse Records (siehe Beschreibung).

Filter können z.B. in Zusammenhang mit bx:containerfilter oder Container-Filteraction verwendet werden, um bestimmte Datensätze anzuzeigen.

Aufbau eines Filters

Filter werden in XML angegeben. Der grundlegende Aufbau ist folgender:

<filter>
  <filter-object>
    ...
  </filter-object>
  <filter-object>
    ...
  </filter-object>
  <order/> <!-- ab Version 2.5.7 -->
  <limit/> <!-- ab Version 2.5.7 -->
  <status/> <!-- ab Version 2.6.1 -->
</filter>


Eine Mehrfachverwendung von "filter-object" bewirkt eine UND-Verknüpfung dieser Objekte.

Objekte

Ein "filter-object" ist folgendermaßen aufgebaut:

<filter-object [required="true"]>
  <field>...</field>
  <field>...</field>
  <type>...</type>
  [
   <request-value>...</request-value>
  |<static-value>...</static-value>
  |<special-value>...</special-value>
  |<request-attribute>...</request-attribute>
  |<session-attribute>...</session-attribute>
  ]
</filter-object>


Eine Mehrfachverwendung von "field" bewirkt eine ODER-Verknüpfung der Felder. Die optionale Angabe von required="true" bewirkt, dass ein Wert, der zum Vergleichen übergeben wird geladen…(z.B. bei "request-value") auch vorhanden sein muss, d.h. wenn nichts übergeben wird, wird die Bedingung auch nicht erfüllt.

field

Der Name des zu überprüfenden Feldes wird angegeben. Falls das Feld eine Verknüpfung darstellt (Untercontainer, Einzelverknüpfung, Mehrfachverknüpfung), kann auch der Wert eines Feldes der Verknüpfung abgefragt werden, dazu einfach das gesuchte Unter-Feld mit einem Schrägstrich anfügen.

<field>feldname</field>
<field>feldname/unterfeld</field>     <!-- Untercontainerfeld -->

type

Hier wird die Art des Vergleiches angegeben. Je nach Typ des Feldes, das geprüft wird, sind verschiedene Vergleiche möglich. Diese sind der folgenden Tabelle zu entnehmen. Verglichen wird dabei der Feldwert mit dem Testwert, so ließt sich z.B. die erste Zeile der Tabelle "Feldwert enthält Testwert" oder die Zeile bei Bildern/Dokumenten "Feldwert ist leer".

Feld-TypTypeArt des Vergleiches:
Feldwert ... [Testwert]
einzeiliger oder mehrzeiliger Text1enthält
2beginnt mit
3endet mit
4ist gleich
5ist leer (Feld soll leer sein: static-value: 1, Feld soll nicht leer sein: static-value: 0)
6Mustervergleich (Regex)
7enthält eines der Wörter von
(Wörter durch Leerzeichen oder Kommas trennen, findet auch Teilstrings)
8ist eines der Wörter von
(Wörter durch Leerzeichen oder Kommas trennen, nur ganze Wörter)
9enthält alle Wörter
(Wörter durch Leerzeichen oder Kommas trennen)
11 - 19leer ODER Bedingung
Bedingung auch erfüllen, falls Feld leer ist (außer für type 5)

z.B.: type 14 für "ist gleich oder leer"
21 - 29NICHT-Bedingung
kehrt die Bedingung um (außer für type 5)
z.B.: type 23 für "endet nicht mit"
31 - 39leer ODER NICHT-Bedingung
Kombination von 11 - 19 und 21 - 29

z.B.: type 32 für "beginnt nicht mit oder ist leer"
Datum mit oder ohne Zeit1Feld ist größer (neuer) als übergebener Wert
2Feld ist kleiner (älter) als übergebener Wert
3ist gleich (Uhrzeit wird ignoriert)
4ist ungleich (Uhrzeit wird ignoriert)
5ist leer (Feld soll leer sein: static-value: 1, Feld soll nicht leer sein: static-value: 0)
6ist im Jahr (vierstellig angeben)
7ist im Monat (gültige Werte: 1-12)
8ist am Tag (gültige Werte: 1-31)
11Feld ist größer oder gleich als übergebener Wert
12Feld ist kleiner oder gleich als übergebener Wert
21Feld ist leer oder größer/gleich als übergebener Wert
22Feld ist leer oder kleiner/gleich als übergebener Wert
31Feld ist größer/gleich als heute + Testwert Tage
32Feld ist kleiner/gleich als heute + Testwert Tage
nur (Uhr)Zeit1Feld ist größer (später)
2Feld ist kleiner (früher)
3Feld ist gleich
4Feld ist ungleich
11Feld ist größer/gleich
12Feld ist kleiner/gleich
21Feld ist leer oder größer/gleich
22Feld ist leer oder kleiner/gleich
6Feld ist in Stunde (0-23)
7Feld ist in Minute (0-59)
8Feld ist in Sekunde (0-59)
5Feld ist leer (Feld soll leer sein: static-value: 1, Feld soll nicht leer sein: static-value: 0)
Zahl oder Preis1Feld ist größer gleich als übergebener Wert
2Feld ist kleiner gleich als übergebener Wert
11Feld größer als übergebener Wert
12Feld kleiner als übergebener Wert
3ist gleich
4ist ungleich
5ist leer (Feld soll leer sein: static-value: 1, Feld soll nicht leer sein: static-value: 0)
21 - 24leer ODER Bedingung (1 bis 4)
31 - 32leer ODER Bedingung (11 und 12)
Wahrheitswert (Boolean)4ist angehakt/gesetzt
5ist leer (null)
Bild1bestimmte ID ist verknüpft
4nicht-gelöschtes Bild ist verknüpft (ab v2.6.2)
5ist leer (Feld soll leer sein: static-value: 1, Feld soll nicht leer sein: static-value: 0)
Dokument5ist leer
8bestimmte ID ist verknüpft
Kartenkoordinaten21x ist gleich
26y ist gleich
5ist leer (Feld soll leer sein: static-value: 1, Feld soll nicht leer sein: static-value: 0)
Einzelverknüpfung8Datensatz-ID ist gleich
10Datensatz-ID ist ungleich
Bei mehreren IDs, Filter mehrmals verwenden.
9Datenlisten-ID ist gleich (nur bei alten Containern)
12enthält eine der Datensatz-IDs von
(IDs durch Leerzeichen, Komma oder Semikolon trennen)
5ist leer (Feld soll leer sein: static-value: 1, Feld soll nicht leer sein: static-value: 0)
4ist verknüpft (ab 2.6.2)
3ist aktiviert (ab 2.6.2)
Mehrfachverknüpfung8enthält Datensatz-ID
10enthält Datensatz-ID nicht (ab v2.6.2)
12enthält eine der Datensatz-IDs von
(IDs durch Leerzeichen, Komma oder Semikolon trennen)
14enthält alle der angegebenen IDs
5ist leer (Feld soll leer sein: static-value: 1, Feld soll nicht leer sein: static-value: 0)
Untercontainer5ist leer (Feld soll leer sein: static-value: 1, Feld soll nicht leer sein: static-value: 0)

value

Der gesuchte Wert kann auf unterschiedliche Weise übergeben werden. Für <value>...</value> können die folgenden Abfragen eingesetzt werden.

request-value

Der Vergleich findet mit dem Wert eines Request-Parameters statt. <request-value>Request-Parameter-Name</request-value>

request-attribute

Der Vergleich findet mit dem Wert eines Request-Attributes statt. <request-attribute>Request-Attribut-Name</request-attribute>

session-attribute

Ein Session-Attribut wird mit dem Feld verglichen. <session-attribute>Session-Attribut-Name</session-attribute>

static-value

Der Wert zum Vergleichen wird direkt übergeben. <static-value>gesuchter Wert</static-value>

special-value

Es wird ein spezieller Wert zum Vergleich herangezogen.

TODAYEs wird mit dem heutigen Datum im Format dd.MM.yyyy verglichen. Um Tage dazu zu addieren (oder abzuziehen) kann das Attribut days verwendet werden (ganze Zahl, die auch negativ sein kann).
<special-value [days="n"]>TODAY</special-value>
NOWEs wird mit der aktuellen Zeit im Format dd.MM.yyyy mm:HH verglichen. Um Tage, Stunden oder Minuten dazu zu addieren (oder abzuziehen) können die Attribute days, hours oder minutes verwendet werden (ganze Zahl, die auch negativ sein kann).
<special-value [days="n"] [hours="n"] [minutes="n"]>NOW</special-value>
USERIDEs wird mit der UserID des aktuellen (eingeloggten) Betrachters verglichen.
<special-value>USERID</special-value>
SESSIONIDDie aktuelle SessionID wird abgeglichen.
<special-value>SESSIONID</special-value>
USERGROUPSDieser Spezialwert erzeugt eine Zeichenkette, welche die ID des Users sowie die IDs der Gruppen, denen er angehört, enthält (jeweils durch Leerzeichen getrennt).
<special-value>USERGROUPS</special-value>
PARENTCONTAINEREs wird mit der ID des übergeordneten Containers verglichen.
<special-value>PARENTCONTAINER</special-value>

clipboard-value

Es wird ein spezieller Clipboard-Wert zum Vergleich herangezogen.

system-value

Es wird der Wert einer Systemvariablen zum Vergleich herangezogen. Die Systemvariable wird unter "Systemeinstellungen" angelegt und gespeichert.

order

Hier wird ein Sortierfeld definiert.

<order field="{Feldname}" [direction="{ascending|descending}"] />

Bei "field" wird der Feldname angegeben, nach dem sortiert wird. Sortiert werden kann nach einzeiligen Text, Datumtypen und Zahlentypen. Bei "direction" wird "ascending" für aufsteigende Sortierung, und descending für absteigende Sortierung angegeben. Bei weglassen der Sortierrichtung wird aufsteigend sortiert.

Diese Funktion ist ab v2.5.7 verfügbar

limit

Hier wird eine Startposition und ein überlauf in der Ergebnisliste definiert

<limit [index="{feste Startposition}"] [max="{Anzahl bis überlauf}"] />

Bei "index" wird die Startposition in der Ergebnisliste angegeben. Standardwert ist 0 für den ersten Datensatz. Bei max wird angegeben, wie viele Datensätze maximal (je Seite) angezeigt werden. Standardwert ist -1 für keine Einschränkung. Bei Angabe von max im bx:containerfilter wird diese Einstellung überschrieben.

Diese Funktion ist ab v2.5.7 verfügbar

status

Es kann angegeben werden, ob aktive und/oder inaktive Datensätze gefiltert werden sollen.

<status active="{false| true}" inactive="{false| true}" />

Erklärt sich - glaube ich - von selbst.

Diese Funktion ist ab v2.6.1 verfügbar

ID-Filter

zum Filtern der Datensatz-ID oder mehrerer IDs - getrennt durch Komma

<filter-id type="include" request-value="paramname" />
<filter-id type="include" request/session-attribute="paramname" />
<filter-id type="include" system/clipboard-value="paramname" /> <!-- ab v2.6.2 -->
<filter-id type="include">feste_id</filter-id>

Gegenteil von include: exclude (schließt diese ID(s) aus) (weitere Erläuterungen folgen noch)

Beispiele

Beispiele

Datumsvergleich

<filter>
  <filter-object>
    <field>Datum</field>
    <type>11</type>
    <special-value days="-1">TODAY</special-value>
 </filter-object>
</filter>

Es werden nur Datensätze angezeigt, die maximal einen Tag alt sind.

Suche

<filter>
  <filter-object>
    <field>Kategorie</field>
    <type>8</type>
    <request-value>kat</request-value>
  </filter-object>
  <filter-object>
    <field>Titel</field>
    <field>Text</field>
    <type>1</type>
    <request-value>search</request-value>
  </filter-object>
  <filter-object>
    <field>Archiv</field>
    <type>4</type>
    <static-value>0</static-value>
  </filter-object>
</filter>

Nur Datensätze, die folgenden Kriterien entsprechen werden ausgegeben:

  • Kategorie-ID (Einzel- oder Mehrfachverknüpfung) ist die selbe wie im Request-Parameter kat
  • Felder Titel oder Text enthalten den Suchbegriff aus dem Request-Parameter search
  • Haken bei Archiv (Wahrheitswert) ist nicht gesetzt