Tables imbriquées : vue d'ensemble
Intégrer les lignes d'une table enfant dans le formulaire d'édition d'un enregistrement parent avec nested_table() - l'API commune XcrudNested, et les cinq dispositions dans lesquelles une table imbriquée peut s'afficher.
nested_table()
Appelez nested_table() sur une instance Xcrud pour intégrer les lignes d'une table enfant dans le formulaire d'édition du parent :
public function nested_table(
string $label,
string $parentField,
string $childTable,
string $childField,
?int $order = null
): XcrudNested
| Paramètre | Type | Par défaut | Description |
|---|---|---|---|
$label | string | requis | Libellé affiché pour cette table imbriquée (nom d'onglet, titre de section, etc., selon la position) |
$parentField | string | requis | Colonne de la table parente dont la valeur filtre les lignes enfants |
$childTable | string | requis | La table enfant à intégrer (doit être autorisée par la liste blanche) |
$childField | string | requis | Colonne de la table enfant comparée à la valeur de $parentField |
$order | ?int | null | Position parmi les tables imbriquées sœurs/l'onglet des propres champs du parent ; si omis, on retombe sur l'ordre de déclaration |
Elle retourne un nœud XcrudNested - une mini-grille CRUD (lignes de $childTable OÙ $childField = la valeur du propre $parentField de la ligne parente) avec son propre Ajouter/Éditer/Supprimer. XcrudNested est un sous-ensemble délibéré de Xcrud : pas de boîte de recherche, pas de panneau de filtre avancé, pas d'actions groupées, pas de sum(), pas de group_by_columns() au niveau imbriqué. Ce qu'il conserve suffit à appeler à nouveau nested_table() sur le nœud retourné, permettant une imbrication arbitrairement profonde - une table imbriquée peut elle-même avoir d'autres tables imbriquées, chaque niveau recevant le même traitement.
$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();
L'API XcrudNested
Les méthodes les plus couramment utilisées sur un nœud retourné :
| Méthode | Description |
|---|---|
columns($fieldList) | Restreint/ordonne les colonnes autorisées de la table enfant que la grille imbriquée affiche |
fields($fieldList) | Restreint/ordonne les colonnes éditables que le propre formulaire d'Ajout/Édition de la grille imbriquée affiche |
order_by($field, $dir = 'asc') | Ordre de tri des lignes de la grille imbriquée |
limit($n) | Taille de page pour la grille imbriquée ; 100 par défaut |
relation(...) | Liste déroulante de clé étrangère pour un champ imbriqué, même forme que le relation() de premier niveau |
gallery($field, $childTable, $options) | Champ multi-images sur le propre formulaire d'Ajout/Édition de la grille imbriquée |
highlight() / highlight_row() | Style conditionnel de cellule/ligne, identique aux méthodes de premier niveau |
intelligent_column_fit($enabled = true) | Surcharge par nœud du comportement responsive d'ajustement des colonnes |
default_tab($label, $order = null) | Nomme/ordonne l'onglet contenant les PROPRES champs de ligne de ce nœud, une fois qu'il a ses propres enfants nested_table() |
position() - où elle s'affiche
position($position = 'bottom') est le contrôle de disposition clé - il décide où une table imbriquée apparaît dans le formulaire d'édition de son parent :
public function position(string $position = 'bottom'): self
| Valeur | Description |
|---|---|
tab | Par défaut. Derrière son propre onglet, aux côtés de l'onglet des propres champs du parent |
bottom | Section pleine largeur toujours visible, ajoutée directement en dessous des propres champs du parent |
bottom-fixed | Identique à bottom, mais collée/épinglée près du bas du panneau, avec une poignée de redimensionnement déplaçable et son propre défilement interne (~35% de hauteur par défaut) |
left / right | Une colonne latérale collante de largeur fixe, aux côtés des propres champs du parent, avec une largeur déplaçable |
Seul l'endroit où un nœud s'affiche change - ce qu'il fait une fois visible (colonnes, champs, relations, imbrication supplémentaire) reste identique quelle que soit la position.