bx:recordchoice
Das Tag recordchoice dient dem Anzeigen eines verknüpften Containerdatenfeldes z. B. als Dropdownfeld oder Liste von Radiobuttons, wobei der aktuell zugewiesene Datensatz angewählt ist und die Liste durch Datensätze einer Containerliste gefüllt wird.
einfache, kurze Variante
<bx:recordchoice.if field="{feldname}" [baseloop="{name}"] current> Inhalt </bx:recordchoice.if>
Dies ist die schnellste und unkomplizierteste Methode für eine Recordchoice-Abfrage.* Nur für neue Container, ab Version 2.5.9 verfügbar*.
field
Feldname im umgebenden Container
baseloop
Name des betreffenden Containers (bei Schachtelungen nötig)
current
aktueller Datensatz
Beispiele
Auflistung
<bx:containerfilter.Rezept pool="Rezepte" idfield="rid">
...
Kategorien: <br>
<bx:containerfilter.Kategorien pool="Rezeptkategorien">
<div class="<bx:recordchoice.if field="Kategorie" current>aktiv</bx:recordchoice.if><bx:recordchoice.if field="Kategorie" current not>inaktiv</bx:recordchoice.if>">
<bx:recordfield.Titel/>
</bx:containerfilter.Kategorien>
...
</bx:containerfilter.Rezept>
Auf der Detailseite des Rezepts werden alle Kategorien aufgelistet und die verknüpften bekommen die Klasse aktiv, die nicht verknüpten die Klasse inaktiv. Diese Klassen können dann beliebig gestylt werden, z. B. mit verschiedenen Hintergrundfarben usw.
Verwendung in einem Select-Feld
<form ...>
<bx:containerfilter.Rezept pool="Rezepte" idfield="rid">
...
Kategorie:<br>
<select name="Kategorie">
<option value="">bitte wählen</option>
<bx:containerfilter.Kategorien pool="Rezeptkategorien">
<option value="<bx:recorddata.id/>"<bx:recordchoice.if field="Kategorie" current> selected</bx:recordchoice.if>><bx:recordfield.Titel/></option>
</bx:containerfilter.Kategorien>
</select>
...
</bx:containerfilter.Rezept>
</form>
Formular, um Rezepte einzugeben. Die Funktion würde hier beim Wiederaufruf nach fehlgeschlagener Validierung zum Tragen kommen oder wenn das Rezept geändert wird. Die Kategorien stehen im Container "Rezeptkategorien" und sind über das Feld "Kategorie" in den Rezept-Datensatz eingebunden.
noch ein Beispiel
<bx:containerfilter.Kontakt pool="12E28377495" idfield="recordid" force="single" dummy>
<form action="save.act" method="post">
<bx:if><input type="hidden" name="recordid" value="<bx:pagedata.request name="recordid"/>"></bx:if>
<label class="label" for="Name">Name:</label><input class="input" id="Name" type="text" name="Name" value="<bx:recordfield.Name/>"><br>
<label class="label" for="Email">E-Mail:</label><input id="Email" type="text" name="Email" value="" class="input">
<label class="label" for="Hobbies">Ihre Hobbies:</label>
<bx:containerloop.Hobbies pool="11111111111">
<input type="checkbox" value="<bx:recorddata.id/>"<bx:recordchoice.if field="Hobbies" current> checked</bx:recordchoice.if>> <bx:recordfield.Titel/><br>
</bx:containerloop.Hobbies>
<textarea class="input" id="Text" rows="5" cols="40" name="Text"><bx:recordfield.Text/></textarea><bx:javainclude modul="Validator" field="Text" /><br>
<input class="submit" type="submit" value="abschicken">
</form>
</bx:containerfilter.Kontakt>
ausführliche Variante
<bx:recordchoice name="{feld}" pool="{id}"> Inhalt </bx:recordchoice>
Erklärungstext.
name
Name des verknüpften Feldes im aktuellen Record
pool
Datenliste, welche die zur Auswahl stehenden Datensätze enthält
Innerhalb dieses Tags können die folgenden Tags benutzt werden.
recordchoice.if
<bx:recordchoice.if (empty | unknown) [not]> Inhalt </bx:recordchoice.if>
Dieses Tag gibt seinen Inhalt nur bei bestimmten Bedingungen aus.
empty / unknown
Der Inhalt wird nur angezeigt, falls aktuell nichts oder ein unbekanntes/gelöschtes Objekt verknüpft ist.
not
kehrt die Bedingung um
recordchoice.poolid
<bx:recordchoice.poolid/>
Die unter pool (im umgebenden Tag) angegebene ID wird ausgegeben.
recordchoice.loop
<bx:recordchoice.loop [list="active"] [orderby="{field}"] [desc] [max="{n}"]> Inhalt </bx:recordchoice.loop>
Es wird eine Schleife erzeugt, die jeden möglichen Datensatz auflistet. Innerhalb dieser Schleife kann z.B. mittels Bx:recorddata oder Bx:recordfield auf Daten zugegriffen werden. Hinweis: Es empfiehlt sich bx:recordchoice.loop durch z.B. Bx:containerloop oder Bx:containerfilter zu ersetzen, um größere Flexibilität zu erhalten. Das ist möglich, da diese Tags alle vom Typ Containerschleife sind.
list
list="active" - zeigt nur aktive Datensätze an
orderby
ein Feld, nach dem sortiert werden soll
desc
kehrt die Sortierrichtung um
max
es werden nur eine bestimmte Anzahl an Elementen angezeigt
Ebenfalls kann innerhalb der Schleife bx:recordchoice.if verwendet werden, allerdings mit einer anderen Bedeutung und anderen Parametern.
<bx:recordchoice.if [not] current value="<text>" />
<bx:recordchoice.if [not] current> Inhalt </bx:recordchoice.if>
current
(kein Parameter-Wert)
value
Der Inhalt bzw. der Text von value wird nur ausgegeben, wenn das Schleifenelement aktuell zugewiesen ist bzw. nicht ist (not).
Beispiele
Einzelverknüpfung
<label for="Branche">Branche</label><br/>
<select name="Branche" id="Branche">
<bx:recordchoice name="Branche" pool="11111111111">
<bx:containerloop pool="11111111111" orderby="Titel">
<option value="<bx:recorddata.id/>" <bx:recordchoice.if current>selected="selected"</bx:recordchoice.if>>
<bx:recordfield.Titel/>
</option>
</bx:containerloop>
</bx:recordchoice>
</select>
Dieser Code erzeugt eine Dropdown-Liste zum Auswählen eines Elementes für die Einfachverknüpfung "Branche". Die möglichen Werte für die Auswahl stehen im Container 11111111111. Der aktuell zugewiesene Datensatz ist ausgewählt.
Mehrfachverknüpfung
Es werden für jeden Datensatz aus dem Container 22222222222 Checkboxen erzeugt. Alle aktuell zugewiesenen Elemente sind angehakt. Das Hidden-Field Branchen.LINKLIST wird benötigt, da der Browser wenn keine Checkbox angehakt ist sonst nichts sendet.