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