Tabelle Annidate come Schede
Il layout predefinito di nested_table(): ogni tabella figlia ottiene una propria scheda accanto ai campi propri del genitore, selezionabile tramite una barra di schede.
Il comportamento predefinito
Se non riposizionata con position(), ogni chiamata a nested_table() viene renderizzata dietro una propria scheda nel modulo di modifica del genitore. Anche i campi propri del genitore ottengono una scheda - non appena esiste almeno una tabella annidata, l'elenco piatto dei campi diventa semplicemente un'altra scheda nella stessa barra:
$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();
Aprendo qui il modulo di modifica di un ordine esistente compaiono tre schede: i campi propri dell'ordine, "Order details" e "Customers" - ogni scheda annidata è una mini griglia CRUD limitata alle righe di quell'ordine nella corrispondente tabella figlia.
default_tab() - dare un nome alla scheda propria del genitore
Per impostazione predefinita, la scheda dei campi propri del genitore è senza etichetta/prima in ordine non appena esistono schede annidate accanto ad essa. default_tab($label, $order = null) le assegna un nome vero e, facoltativamente, una posizione specifica tra le sue schede sorelle:
public function default_tab(string $label, ?int $order = null): self
| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
$label | string | obbligatorio | Etichetta per la scheda che contiene i campi propri della tabella |
$order | ?int | null | Posizione tra le schede sorelle; se omesso segue l'ordine di dichiarazione |
$xcrud->default_tab('Order info');
default_tab() non ha alcun effetto su una pagina senza alcuna chiamata a nested_table() - il modulo resta un elenco piatto di campi, senza nulla da inserire in una barra di schede.
Annidamento ricorsivo
Poiché nested_table() restituisce un nodo XcrudNested che a sua volta possiede un metodo nested_table(), una tabella annidata può avere ulteriori tabelle annidate proprie - ogni livello aggiuntivo riceve esattamente lo stesso trattamento a schede un livello più sotto. Il default_tab() proprio di XcrudNested funziona in modo identico, assegnando un nome alla scheda dei campi di riga propri di quel nodo non appena ha figli propri:
$orderdetails = $xcrud->nested_table('Order details', 'orderNumber', 'orderdetails', 'orderNumber');
// Un ulteriore livello: Products annidato dentro il modulo di modifica proprio di Order details.
$products = $orderdetails->nested_table('Products', 'productCode', 'products', 'productCode');
$orderdetails->default_tab('Line item');
Modificando ora una riga di dettaglio ordine compare la sua propria barra a due schede - "Line item" (i suoi campi propri) e "Products" - annidata un livello dentro la scheda "Order details" propria dell'ordine.