Tablas anidadas como pestañas
La disposición por defecto de nested_table(): cada tabla hija recibe su propia pestaña junto a los campos propios del padre, intercambiables mediante una franja de pestañas.
El comportamiento por defecto
A menos que se reubique con position(), toda llamada a nested_table() se renderiza detrás de su propia pestaña en el formulario de edición del padre. Los campos propios del padre también reciben una pestaña; en cuanto existe al menos una tabla anidada, la lista plana de campos pasa a ser simplemente otra pestaña más en la misma franja:
$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();
Abrir aquí el formulario de edición de un pedido existente muestra tres pestañas: los campos propios del pedido, "Order details" y "Customers"; cada pestaña anidada es una minicuadrícula CRUD acotada a las filas de ese pedido en la tabla hija correspondiente.
default_tab() - nombrar la pestaña propia del padre
Por defecto, la pestaña de los campos propios del padre no tiene etiqueta/aparece primero una vez que existen pestañas anidadas junto a ella. default_tab($label, $order = null) le da un nombre real y, opcionalmente, una posición específica entre sus hermanas:
public function default_tab(string $label, ?int $order = null): self
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
$label | string | obligatorio | Etiqueta para la pestaña que contiene los campos propios de la tabla |
$order | ?int | null | Posición entre las pestañas hermanas; si se omite, se usa el orden de declaración |
$xcrud->default_tab('Order info');
default_tab() no tiene ningún efecto en una página sin llamadas a nested_table(); el formulario permanece como una lista plana de campos, sin nada que colocar en una franja de pestañas.
Anidamiento recursivo
Como nested_table() devuelve un nodo XcrudNested que a su vez tiene su propio método nested_table(), una tabla anidada puede tener más tablas anidadas propias, recibiendo cada nivel adicional exactamente el mismo tratamiento de pestañas un nivel más abajo. El propio default_tab() de XcrudNested funciona de forma idéntica, nombrando la pestaña de campos de fila propia de ese nodo una vez que este tiene sus propios hijos:
$orderdetails = $xcrud->nested_table('Order details', 'orderNumber', 'orderdetails', 'orderNumber');
// Un nivel más: Products anidado dentro del propio formulario de edición de Order details.
$products = $orderdetails->nested_table('Products', 'productCode', 'products', 'productCode');
$orderdetails->default_tab('Line item');
Editar ahora una fila de detalle de pedido muestra su propia franja de dos pestañas: "Line item" (sus propios campos) y "Products", anidada un nivel dentro de la propia pestaña "Order details" del pedido.