Nested Tables als Tabs
Das Standardlayout von nested_table(): Jede Kindtabelle erhält einen eigenen Tab neben den eigenen Feldern des übergeordneten Datensatzes, umschaltbar über eine Tab-Leiste.
Das Standardverhalten
Sofern nicht mit position() umpositioniert, wird jeder nested_table()-Aufruf hinter einem eigenen Tab im Bearbeitungsformular des übergeordneten Datensatzes gerendert. Auch die eigenen Felder des übergeordneten Datensatzes erhalten einen Tab - sobald mindestens eine Nested Table existiert, wird die flache Feldliste einfach zu einem weiteren Tab in derselben Leiste:
$xcrud = Xcrud::get_instance();
$xcrud->table('orders');
$xcrud->route('orders');
$orderdetails = $xcrud->nested_table('Order details', 'orderNumber', 'orderdetails', 'orderNumber');
$orderdetails->columns('productCode,quantityOrdered,priceEach');
$customers = $xcrud->nested_table('Customers', 'customerNumber', 'customers', 'customerNumber');
$customers->columns('customerName,city,country');
echo $xcrud->render();
Das Öffnen des Bearbeitungsformulars einer bestehenden Bestellung zeigt hier drei Tabs: die eigenen Felder der Bestellung, "Order details" und "Customers" - jeder Nested-Tab ein Mini-CRUD-Grid, das auf die Zeilen dieser Bestellung in der jeweiligen Kindtabelle beschränkt ist.
default_tab() - den eigenen Tab des übergeordneten Datensatzes benennen
Standardmäßig ist der eigene Felder-Tab des übergeordneten Datensatzes unbeschriftet/an erster Stelle, sobald Nested-Tabs daneben existieren. default_tab($label, $order = null) gibt ihm einen echten Namen und optional eine bestimmte Position unter seinen Geschwistern:
public function default_tab(string $label, ?int $order = null): self
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
$label | string | erforderlich | Beschriftung für den Tab mit den eigenen Feldern der Tabelle |
$order | ?int | null | Position unter den Geschwister-Tabs; ausgelassen fällt auf die Deklarationsreihenfolge zurück |
$xcrud->default_tab('Order info');
default_tab() hat keine Wirkung auf einer Seite ganz ohne nested_table()-Aufrufe - das Formular bleibt eine flache Feldliste, es gibt nichts, das man in eine Tab-Leiste stecken könnte.
Rekursives Verschachteln
Da nested_table() einen XcrudNested-Knoten zurückgibt, der selbst eine nested_table()-Methode besitzt, kann eine Nested Table wiederum eigene Nested Tables haben - jede weitere Ebene erhält genau dieselbe Tab-Behandlung eine Stufe tiefer. Das eigene default_tab() von XcrudNested funktioniert identisch und benennt den eigenen Zeilenfelder-Tab dieses Knotens, sobald er eigene Kinder hat:
$orderdetails = $xcrud->nested_table('Order details', 'orderNumber', 'orderdetails', 'orderNumber');
// A further level: Products nested inside Order details' own edit form.
$products = $orderdetails->nested_table('Products', 'productCode', 'products', 'productCode');
$orderdetails->default_tab('Line item');
Das Bearbeiten einer Bestellpositionszeile zeigt jetzt eine eigene Zwei-Tab-Leiste - "Line item" (eigene Felder) und "Products" - eine Ebene tiefer verschachtelt innerhalb des eigenen "Order details"-Tabs der Bestellung.