/

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ámetroTipoPor defectoDescripción
$labelstringobligatorioEtiqueta para la pestaña que contiene los campos propios de la tabla
$order?intnullPosició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.