/

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
ParameterTypStandardBeschreibung
$labelstringerforderlichBeschriftung für den Tab mit den eigenen Feldern der Tabelle
$order?intnullPosition 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.