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.
Funktionen:
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 |
|---|---|
| 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 | |
|---|---|
| value | Der Inhalt bzw. der Text vonvaluewird 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.