Skip to main content

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>>&nbsp;<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
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

<input type="hidden" name="Branchen.LINKLIST" value="22222222222">
<bx:recordchoice name="Branchen" pool="22222222222">
  <bx:containerloop pool="22222222222" orderby="Titel">
    <label>
      <input type="checkbox" name="Branchen.LINKRECORD" id="id_<bx:recorddata.id/>" value="<bx:recorddata.id/>"<bx:recordchoice.if current> checked="checked"</bx:recordchoice.if>>
    </label><br>
  </bx:containerloop>
</bx:recordchoice>

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.