# 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

```xml
<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**

```xml
<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**

```xml
<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**

```xml
<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

```xml
<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

```xml
<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

```xml
<bx:recordchoice.poolid/>
```

Die unter `pool` (im umgebenden Tag) angegebene ID wird ausgegeben.

### recordchoice.loop

```xml
<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 <a href="http://wiki.batix.net/index.php/Bx:recorddata" target="_blank">Bx:recorddata</a> oder <a href="http://wiki.batix.net/index.php/Bx:recordfield" target="_blank">Bx:recordfield</a> auf Daten zugegriffen werden.
**Hinweis:** Es empfiehlt sich bx:recordchoice.loop durch z.B. <a href="http://wiki.batix.net/index.php/Bx:containerloop" target="_blank">Bx:containerloop</a> oder <a href="http://wiki.batix.net/index.php/Bx:containerfilter" target="_blank">Bx:containerfilter</a> 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.

```xml
<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**

```xml
<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**

```xml
<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.