Nested Tables im Überblick
Zeilen einer Kindtabelle im Bearbeitungsformular eines übergeordneten Datensatzes einbetten mit nested_table() - die gemeinsame XcrudNested-API und die fünf Layouts, in denen eine Nested Table gerendert werden kann.
nested_table()
Rufen Sie nested_table() auf einer Xcrud-Instanz auf, um die Zeilen einer Kindtabelle in das Bearbeitungsformular des übergeordneten Datensatzes einzubetten:
public function nested_table(
string $label,
string $parentField,
string $childTable,
string $childField,
?int $order = null
): XcrudNested
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
$label | string | erforderlich | Beschriftung für diese Nested Table (Tab-Name, Abschnittsüberschrift usw., je nach Position) |
$parentField | string | erforderlich | Spalte der übergeordneten Tabelle, deren Wert die Kindzeilen filtert |
$childTable | string | erforderlich | Die einzubettende Kindtabelle (muss freigegeben sein) |
$childField | string | erforderlich | Spalte der Kindtabelle, die mit dem Wert von $parentField verglichen wird |
$order | ?int | null | Position unter Geschwister-Nested-Tables/dem eigenen Feld-Tab des übergeordneten Datensatzes; ausgelassen fällt auf die Deklarationsreihenfolge zurück |
Sie gibt einen XcrudNested-Knoten zurück - ein Mini-CRUD-Grid ($childTable-Zeilen WHERE $childField = der Wert von $parentField der übergeordneten Zeile) mit eigenem Add/Edit/Delete. XcrudNested ist eine bewusste Teilmenge von Xcrud: keine Suchbox, kein Advanced-Filter-Panel, keine Massenaktionen, kein sum(), kein group_by_columns() auf Nested-Ebene. Was erhalten bleibt, reicht aus, um auf dem zurückgegebenen Knoten erneut nested_table() aufzurufen und beliebig tief zu verschachteln - eine Nested Table kann selbst wieder Nested Tables haben, jede Ebene erhält dieselbe Behandlung.
$xcrud = Xcrud::get_instance();
$xcrud->table('orders');
$xcrud->route('orders');
$orderdetails = $xcrud->nested_table('Order details', 'orderNumber', 'orderdetails', 'orderNumber');
$orderdetails->columns('productCode,quantityOrdered,priceEach');
$orderdetails->order_by('productCode', 'asc');
echo $xcrud->render();
Die XcrudNested-API
Die am häufigsten verwendeten Methoden auf einem zurückgegebenen Knoten:
| Methode | Beschreibung |
|---|---|
columns($fieldList) | Beschränkt/ordnet, welche freigegebenen Spalten der Kindtabelle das Nested-Grid anzeigt |
fields($fieldList) | Beschränkt/ordnet, welche bearbeitbaren Spalten das eigene Add/Edit-Formular des Nested-Grids anzeigt |
order_by($field, $dir = 'asc') | Sortierreihenfolge für die Zeilen des Nested-Grids |
limit($n) | Seitengröße für das Nested-Grid; Standard 100 |
relation(...) | Fremdschlüssel-Dropdown für ein Nested-Feld, gleiche Form wie das Top-Level-relation() |
gallery($field, $childTable, $options) | Mehrbild-Feld im eigenen Add/Edit-Formular des Nested-Grids |
highlight() / highlight_row() | Bedingtes Zellen-/Zeilen-Styling, wie bei den Top-Level-Methoden |
intelligent_column_fit($enabled = true) | Pro-Knoten-Override des responsiven Spaltenanpassungsverhaltens |
default_tab($label, $order = null) | Beschriftet/ordnet den Tab mit den EIGENEN Zeilenfeldern dieses Knotens, sobald er selbst eigene nested_table()-Kinder hat |
position() - wo sie gerendert wird
position($position = 'bottom') ist die zentrale Layout-Steuerung - sie entscheidet, wo eine Nested Table im Bearbeitungsformular des übergeordneten Datensatzes erscheint:
public function position(string $position = 'bottom'): self
| Wert | Beschreibung |
|---|---|
tab | Standard. Hinter einem eigenen Tab, neben dem eigenen Felder-Tab des übergeordneten Datensatzes |
bottom | Immer sichtbarer, vollbreiter Abschnitt direkt unterhalb der eigenen Felder des übergeordneten Datensatzes |
bottom-fixed | Wie bottom, aber klebend/fixiert nahe dem unteren Rand des Panels, mit ziehbarem Größenänderungsgriff und eigenem internen Scroll (standardmäßig ~35 % Höhe) |
left / right | Eine feste, klebende Seitenleistenspalte neben den eigenen Feldern des übergeordneten Datensatzes, mit ziehbarer Breite |
Nur wo ein Knoten gerendert wird, ändert sich - was er einmal sichtbar tut (Spalten, Felder, Relationen, weitere Verschachtelung), bleibt unabhängig von der Position identisch.