/

Tables imbriquées sous forme d'onglets

La disposition par défaut de nested_table() : chaque table enfant reçoit son propre onglet aux côtés des propres champs du parent, permutable via une barre d'onglets.

Le comportement par défaut

Sauf repositionnement avec position(), chaque appel à nested_table() s'affiche derrière son propre onglet dans le formulaire d'édition du parent. Les propres champs du parent reçoivent également un onglet - dès qu'au moins une table imbriquée existe, la liste plate de champs devient simplement un onglet de plus dans la même barre :

$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();

Ouvrir ici le formulaire d'édition d'une commande existante affiche trois onglets : les propres champs de la commande, « Order details » et « Customers » - chaque onglet imbriqué étant une mini-grille CRUD limitée aux lignes de cette commande dans la table enfant correspondante.

default_tab() - nommer le propre onglet du parent

Par défaut, l'onglet des propres champs du parent est sans libellé/en première position dès que des onglets imbriqués existent à ses côtés. default_tab($label, $order = null) lui donne un vrai nom et, en option, une position précise parmi ses onglets frères :

public function default_tab(string $label, ?int $order = null): self
ParamètreTypePar défautDescription
$labelstringrequisLibellé de l'onglet contenant les propres champs de la table
$order?intnullPosition parmi les onglets frères ; si omis, on retombe sur l'ordre de déclaration
$xcrud->default_tab('Order info');

default_tab() n'a aucun effet sur une page sans aucun appel à nested_table() - le formulaire reste une liste plate de champs, sans rien à placer dans une barre d'onglets.

Imbrication récursive

Comme nested_table() retourne un nœud XcrudNested qui possède lui-même une méthode nested_table(), une table imbriquée peut avoir ses propres tables imbriquées supplémentaires - chaque niveau additionnel recevant exactement le même traitement en onglets un cran plus bas. Le propre default_tab() de XcrudNested fonctionne à l'identique, nommant l'onglet des propres champs de ligne de ce nœud dès qu'il a ses propres enfants :

$orderdetails = $xcrud->nested_table('Order details', 'orderNumber', 'orderdetails', 'orderNumber');

// Un niveau supplémentaire : Products imbriqué dans le propre formulaire d'édition de Order details.
$products = $orderdetails->nested_table('Products', 'productCode', 'products', 'productCode');
$orderdetails->default_tab('Line item');

Éditer une ligne de détail de commande affiche désormais sa propre barre à deux onglets - « Line item » (ses propres champs) et « Products » - imbriquée un niveau à l'intérieur du propre onglet « Order details » de la commande.