/

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
ParameterTypStandardBeschreibung
$labelstringerforderlichBeschriftung für diese Nested Table (Tab-Name, Abschnittsüberschrift usw., je nach Position)
$parentFieldstringerforderlichSpalte der übergeordneten Tabelle, deren Wert die Kindzeilen filtert
$childTablestringerforderlichDie einzubettende Kindtabelle (muss freigegeben sein)
$childFieldstringerforderlichSpalte der Kindtabelle, die mit dem Wert von $parentField verglichen wird
$order?intnullPosition 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:

MethodeBeschreibung
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
WertBeschreibung
tabStandard. Hinter einem eigenen Tab, neben dem eigenen Felder-Tab des übergeordneten Datensatzes
bottomImmer sichtbarer, vollbreiter Abschnitt direkt unterhalb der eigenen Felder des übergeordneten Datensatzes
bottom-fixedWie 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 / rightEine 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.