bx:containerfilter
Mit dem Tag containerfilter kann man eine Containerliste (spezifiziert durch die Container-ID oder den Container-Namen) nach Bedingungen filtern und aktivierte Elemente, die zutreffen, in einer Schleife durchlaufen lassen. Der Tag-Inhalt wird geladen…dabei für jedes gefundene Element ausgeführt.
Falls {titel} angegeben ist, wird in der Administration ein Eingabefeld für die Filter-Bedingungen angezeigt (zu finden rechts in der Toolbox unter "Tag-Einstellungen"). Alternativ kann auch eine Bedingung direkt im Tag angegeben werden.
Dieses Tag kann unter Tag-Einstellungen konfiguriert werden.
Funktionen:
mehrere Elemente (statische Angabe)
<bx:containerfilter.{titel} pool="(ContainerID | Containername)" force="list | top | standalone | match" [max="{n}"] [orderby="{feldname}"] [desc] [startindex="{n}"] [sql] [evalbx] [nulls-at-end] [id-descending-order] [force-parameter-reset] [loopable]>
Inhalt
</bx:containerfilter.{titel}>
Die Parameter stehen statisch im Quelltext.
| titel | frei wählbarer Name des Filters |
|---|---|
| pool | ID oder Name des Containers (ab Vers. 2.6.0) |
| force | Eine passende Wahl des Modus anhand der gewünschten Funktionen (einer oder mehrere Datensätze, Filterung ja/nein, Blättern ja/nein) trägt erheblich zur Performance-Steigerung bei, falls im Container sehr viele Datensätze vorhanden sind. So empfiehlt sich z.B. immer ein Modus ohne Blättern zu wählen, falls das Blättern nicht gebraucht wird. Die folgende Tabelle gibt Aufschluss über die verschiedenen Modi und zeigt jeweils, ob die Datensätze anhand der Filterung eingeschränkt werden bzw. ob ein Blättern möglich ist. Achtung: Fehlt die Modusangabe, wird bei Vorhandensein des Standard-Requestparameters recordid eine Detailausgabe (force=single) ausgegeben, ansonsten eine Liste (force=list). Eine explizite Angabe von force wird empfohlen! |
force= |
Beschreibung |
| list | Liste von Datensätzenfür Standard-Blätterlisten |
| top | Liste von Datensätzen z.B. zur Anzeige der 3 aktuellsten News als Teaser |
| single | ein einzelner Datensatz, Übergabe der ID im Request Detailseite mit Einzel-Blätterfunktion zu einer Standard-Blätterliste |
| match | ein einzelner Datensatz, Übergabe der ID im Request geeignet für eine Detailseite mit Berechtigungs-Checks |
| standalone | ein einzelner Datensatz, Übergabe der ID im Request funktioniert wie bx:record |
| max | maximale Anzahl der auszugebenden Datensätze (z.B. max="5") |
| orderby | Feldangabe, nach der die Ausgabe sortiert sein soll (Datum, Name etc.) siehe auch bei nulls-at-end oder id-descending-orderNEU: Der Parameter orderby nimmt jetzt mehrere Feldnamen, getrennt durch Komma, Leerzeichen, Semikolon oder Pipe an und es kann über eine Einzelverknüpfung sortiert werden (siehe Beispiel) (ab V2.7) Dem Feldnamen kann man ein Pluszeichen für aufsteigende Sortierung (A..Z) oder ein Minuszeichen für absteigende Sortierung (Z..A) voranstellen (wenn kein + oder - vorangestellt ist, wird nach desc geschaut) |
| startindex | Stelle, an der die Ausgabe beginnen soll (Beginn bei 0) |
| desc | dreht die Sortierrichtung um |
| sql evalbx | statt Filterangaben kann in den Tag-Einstellungen eine SQL angegeben werden (siehe Beispiel) wenn angegeben, können in der SQL bx-Tags benutzt werden |
| nulls-at-end | null-Felder werden am Ende ausgegeben |
| id-descending-order | nach ID absteigend sortieren |
| force-parameter-reset | bewirkt, daß bei einer Containerfilter-Schachtelung der innere Container bei jedem Durchlauf des äußeren neu initialisiert wird (intern, Debugging) ab v.2.6.6 |
| loopable | Filterangaben innerhalb eines Designloops |
Beispiele
Containerfilter-Aufruf im Quelltext
<bx:containerfilter.Mitglieder pool="Mitglieder" force="list" max="10" orderby="Name" desc startindex="5">
<bx:recordfield.Name/><br>
</bx:containerfilter.Mitglieder>
Es werden maximal 10 Namen der im Container "Mitglieder" gespeicherten Datensätze ausgegeben. Die Datensätze sind nach Name (orderby) sortiert, allerdings absteigend (z-a), da "desc" angegeben wurde. Die Ausgabe startet mit dem 5. Datensatz. Filterungen können dann beim Menüpunkt unter "Tag-Einstellungen" (rechts unter "Tools") vorgenommen werden. Siehe auch "Filter".
Beispiel: Folgender Filter gibt nur die Mitglieder aus, die im Vorstand sind (Verknüpfung mit einem Container, der "Rollen" enthält über das Feld "Rolle", ID ist die DS-ID der Rolle "Vorstand"):
zugehöriger Filter
<filter>
<filter-object>
<field>Rolle</field>
<type>8</type>
<static-value>12FF89E7458</static-value>
</filter-object>
</filter>
gleiches Beispiel wie oben, nur mit einer SQL:
Containerfilter-Aufruf im Quelltext
<bx:containerfilter.Mitglieder pool="Mitglieder" sql>
<bx:recordfield.Name/><br>
</bx:containerfilter.Mitglieder>
zugehöriger Filter
SELECT m.*
FROM bxc_mitglieder m
WHERE
m.ACTIV = 'j'
AND m.Rolle = '12FF89E7458'
ORDER BY m.Name DESC
LIMIT 5,10;
Wieder gleiches Beispiel, allerdings wird die Rolle über den Request angegeben
Containerfilter-Aufruf im Quelltext
<bx:containerfilter.Mitglieder pool="Mitglieder" sql evalbx>
<bx:recordfield.Name/><br>
</bx:containerfilter.Mitglieder>
zugehöriger Filter
SELECT m.*
FROM bxc_mitglieder m
WHERE
m.ACTIV = 'j'
AND m.Rolle = '<bx:pagedata.request name="rolle"/>'
ORDER BY m.Name DESC
LIMIT 5,10;
mehrere Sortierparameter: ** (ab V2.7)**
Der Parameter orderby nimmt jetzt mehrere Feldnamen, getrennt durch Komma, Leerzeichen, Semikolon oder Pipe an. Dem Feldnamen kann man ein Pluszeichen für aufsteigende Sortierung (A..Z) oder ein Minuszeichen für absteigende Sortierung (Z..A) voranstellen.
zugehöriger Filter
<bx:containerfilter.Name orderby="-Datum,+Titel"> <!-- wenn kein + oder - vorangestellt ist, wird nach desc geschaut -->
<bx:containerfilter.Name orderby="-Datum,Titel" [asc]>
<bx:containerfilter.Name orderby="Datum,+Titel" desc> <!-- ergeben die gleiche Sortierung wie das Beispiel oben -->
<bx:containerfilter.Name orderby="-Jahr -Monat -Tag">
<bx:containerfilter.Name orderby="Jahr Monat Tag" desc> <!-- ergeben auch beide die selbe Sortierung.
Sortierung über Einzelverknüpfung: (ab V2.7)Sortierung über Einzelverknüpfung ist auch für jedes Feld möglich:
zugehöriger Filter
<bx:containerfilter.Name orderby="Kategorie/Titel;-Preisgruppe/Nummer">
Dreimal anders und doch das Gleiche
zugehöriger Filter
<bx:containerloop orderby="-Datum,+Titel">
<bx:containerloop orderby="-Datum,Titel" [asc]>
<bx:containerloop orderby="Datum,+Titel" desc>
noch ein Beispiel
zugehöriger Filter
<bx:containerloop orderby="-Jahr -Monat -Tag"> ist das gleiche wie
<bx:containerloop orderby="Jahr Monat Tag" desc>
mehrere Elemente (dynamische Angaben im Request)
<bx:containerfilter.{titel} pool="(ContainerID | Containername)" [force="list"] [maxparam="{param}"] [orderbyparam="{param}"] [directionparam="{param}"] [indexparam="{param}"]>
Inhalt
</bx:containerfilter.{titel}>
Die Parameter werden im Request übergeben.
| {titel} | frei wählbarer Name des Filters |
|---|---|
| pool | ID oder Name des Containers (ab Vers. 2.6.0) |
| force | Ausgabemodus Liste |
| orderbyparam | Parametername, mit dem das Sortierfeld übergeben wird, kann auch gleich mit der Sortierrichtung gekoppelt werden, z.B. "+Name" und "-Name" für Sortierung nach Name aufsteigend bzw. absteigend NEU: reagiert jetzt auch auf mehrfach vorkommende Request-Parameter (siehe Beispiel) (ab V2.7) |
| directionparam | Parametername für die Sortierrichtung: + für aufsteigend, - für absteigend |
| maxparam | Parametername für die maximale Anzahl der auszugebenden Datensätze (pro Seite) |
| indexparam | Stelle, an der die Ausgabe beginnen soll (Standard: "index") NEU: wird nur noch beachtet wenn kein + (%2B) oder - im Request-Parameter vorangestellt sind (ab V2.7) |
Beispiele
Beispiel Titel
<bx:containerfilter.aktuelleAngebote pool="Artikel" force="list" maxparam="max" orderbyparam="titel" directionparam="direction" indexparam="index">
<bx:recordfield.Titel/> <bx:recordfield.Preis pattern="0.00"/><br>
</bx:containerfilter.aktuelleAngebote>
Diesen Filter findet man oft auf blätterbaren (Angebots-)Seiten. In diesem Beispiel werden alle Artikel mit Preis gelistet. Dann kann der Kunde selbst entscheiden (Form mit entsprechenden Auswahlmöglichkeiten - fehlt im Beispiel), wieviele Datensätze pro Seite angezeigt werden sollen (maxparam), nach welchem Feld sortiert werden soll (orderbyparam), z.b. Name, Preis, Datum, ob auf- oder absteigend sortiert sein soll (directionsparam).
Beim Blättern zwischen den Anzeigeseiten wird noch der Parameter "indexparam" gebraucht. Im Zusammenhang mit "maxparam" werden dann die jeweils pro Seite aufzulistenden Datensätze ermittelt.
Beispiel Titel
<bx:containerfilter.Name orderbyparam="sort">
Mit dem Query-String ?sort=Name&sort=Vorname wird nun nach beiden Feldern sortiert. (ab V2.7) Der Parameter directionparam wird nur noch beachtet wenn kein + (%2B) oder - im Request-Parameter vorangestellt sind.
ein bestimmtes Element (über Request)
<bx:containerfilter.{titel} pool="(ContainerID | Containername)" force="single" idfield="{param}" [dummy]>
Inhalt
</bx:containerfilter.{titel}>
| {titel} | frei wählbarer Name des Filters |
|---|---|
| pool | ID oder Name des Containers (ab Vers. 2.6.0) |
| force | Ausgabemodus Einzelausgabe |
| idfield | Parametername, der die ID des Datensatzes enthält (Standard: "recordid") |
| dummy | bei Fehlen des Parameters wird ein Datensatz simuliert (z.B. beim Erstaufruf von Formularen) |
Beispiele
Beispiel Titel
<bx:containerfilter.heimischeSingvoegel pool="Singvoegel" force="single" idfield="vogelid">
<h1><bx:recordfield.Titel/></h1>
<img src="<bx:recordfield.Bild width="250" height="180" type="path"/>" alt="<bx:recordfield.Titel/>">
<bx:recordfield.Beschreibung/>
</bx:containerfilter.heimischeSingvoegel>
Typische Detailseite. Der Requestparameter "vogelid" enthält die ID des gewünschten Datensatzes. Möglicher Aufruf für dieses Beispiel: Elster
ein zufälliges Element
<bx:containerfilter.{titel} pool="(ContainerID | Containername)" force="random" [max="{n}"]>
Inhalt
</bx:containerfilter.{titel}>
Es wird ein zufälliges Element aus der Ergebnisliste ausgewählt. Ab Version 2.6.2 hat man auch die Möglichkeit, mehrere Random-Datensätze anzeigen zu lassen.
| {titel} | frei wählbarer Name des Filters |
|---|---|
| pool | ID oder Name des Containers (ab Vers. 2.6.0) |
| force | Ausgabemodus Random (zufälliges Element) |
| max | Anzahl der auszugebenden Datensätze (ab Version 2.6.2) Standard: 1 |
Beispiele
Beispiel Titel
<bx:containerfilter.Kopfbild pool="Bilder" force="random">
<div class="kopfbild">
<img src="<bx:recordfield.Bild width="850" height="2000" type="path"/>" alt="<bx:recordfield.Titel/>">
</div>
</bx:containerfilter.Kopfbild>
Bei jeden Seitenaufruf wird ein anderes Kopfbild angezeigt.
Verknüpfte Tabelle filtern
<bx:containerfilter pool="(ContainerID | Containername)" base="{Anzeige-ID}" linkfield="{Verknüpfungsfeld}">
Durch diese Erweiterung kann auch eine mit der Haupttabelle verknüpfte Tabelle gefiltert werden.
| pool | ID oder Name des Containers (ab Vers. 2.6.0) |
|---|---|
| base | ID des verknüpften Container (Name geht leider nicht) |
| linkfield | Name des Feldes in der Haupttabelle, das mit der Anzeige-Tabelle verknüpft ist |
Beispiele
Beispiel Titel
<bx:containerfilter.ArtikelKategorien pool="Artikel" base="0123456789" linkfield="Kategorie">
<a href="artikelliste.htm?kat=<bx:recorddata.id/>"><bx:recordfield.Titel/></a><br>
</bx:containerfilter.ArtikelKategorien>
Es sollen nur Kategorien (im Container mit der ID "0123456789") aufgelistet werden, mit der auch Artikel (über das Feld "Kategorie") verknüpft sind. Kategorien ohne Artikel werden ignoriert. Allerdings werden auch deaktivierte Kategorien angezeigt, wenn der entsprechende Artikel aktiv ist.
Bedingung im Tag
<bx:containerfilter pool="(ContainerID | Containername)" name="{Feldname}" type="{Vergleichsart}" value="{Vergleichswert}" [required] [dummy]>
Inhalt
</bx:containerfilter>
WICHTIG: Der Filter darf keinen Bezeichner haben. Es können auch die Parameter force, max, orderby, startindex angegeben werden (siehe hier).
| {titel} | frei wählbarer Name des Filters |
|---|---|
| pool | ID oder Name des Containers (ab Vers. 2.6.0) |
| name | Name des zu überprüfenden Feldes (siehe auch "Filter") |
| type | Art des Vergleiches (siehe auch "Filter") |
| value | gesuchter Wert (siehe auch "Filter") statisch: einfach gesuchten Wert angeben (z.B. eine ID) dynamisch: mit Präfix (siehe auch "Präfixe") |
| required | wenn nicht vorhanden, dann wird nichts ausgegeben (ab Version 2.6.1) |
| dummy | im Detailmodus: wird kein Datensatz gefunden, wird ein Datensatz simuliert (Inhalt wird ausgegeben) Details dazu hier bei "force" |
Beispiele
Beispiel Titel
<bx:containerfilter pool="Bilder" name="Kategorie" type="8" value="1234567890" orderby="Titel">
<img src="<bx:recordfield.Bild width="850" height="2000" type="path"/>" alt="<bx:recordfield.Titel/>">
</bx:containerfilter>
Alle Datensätze aus dem Container "Bilder", die im Feld "Kategorie" mit dem Datensatz mit der ID "1234567890" verknüpft sind, werden angezeigt.
Bedingung im Clipboard
<bx:containerfilter pool="(ContainerID | Containername)" force="list" config="clipboard:config">
Inhalt
</bx:containerfilter>
WICHTIG: Der Filter darf keinen Bezeichner haben.
| {titel} | frei wählbarer Name des Filters |
|---|---|
| pool | ID oder Name des Containers (ab Vers. 2.6.0) |
| force | Ausgabemodus Liste |
| config | dynamische Konfiguration |
Beispiele
Beispiel Titel
<bx:clipboard.cut name="config" trim>
<filter>
<filter-object required="false">
<field>Invalid</field>
<type>4</type>
<static-value>0</static-value>
</filter-object>
<filter-object required="false">
<field>Anbieter</field>
<type>8</type>
<special-value>PARENTCONTAINER</special-value>
</filter-object>
</filter>
</bx:clipboard.cut>
Die Bedingung wird dynamisch zusammengestellt und im weiteren Verlauf für eine Container-Filterung genutzt.
Bedingung in Systemeinstellungen
<bx:containerfilter.KontaktFilter pool="Kontakte" force="list" orderby="Name" config="system:filter_kontakte">
...
</bx:containerfilter.KontaktFilter>
Die Filterbedingungen werden in den Systemeinstellungen gespeichert.
Verweise auf diese Seite:
Container bx:tablefilter Filter Filter bx:tablefilter Container bx:recorddata bx:recorddata
(8 Verweise)
Keywords: containerfilter