/

Varios widgets en una sola página

Monta dos o más cuadrículas Xcrud independientes una junto a otra en una sola página con Xcrud::get_instance().

get_instance() no es un singleton real

A pesar del nombre (conservado por compatibilidad hacia atrás con el propio get_instance() del antiguo xCrud), cada llamada a Xcrud::get_instance() devuelve una instancia nueva y configurada de forma independiente - nunca una compartida. Eso es lo que hace seguro montar varios widgets en una página: configurar el table()/columnas/opciones del segundo widget nunca se filtra de vuelta al primero.

Ejemplo: dos cuadrículas en una página

Cada widget necesita su propio table() y, de forma crítica, su propio valor único de route() - la ruta es lo que usa el widget del lado del cliente para dirigir sus propias llamadas AJAX, así que dos widgets que compartieran una ruta chocarían:

$xcrud1 = Xcrud::get_instance();
$xcrud1->table('orders');
$xcrud1->route('multi-orders');
$xcrud1->title('Orders');
$xcrud1->columns('orderNumber,orderDate,status,customerNumber');

$xcrud2 = Xcrud::get_instance();
$xcrud2->table('payments');
$xcrud2->route('multi-payments');
$xcrud2->title('Payments');
$xcrud2->columns('customerNumber,checkNumber,paymentDate,amount');

$xcrud3 = Xcrud::get_instance();
$xcrud3->table('customers');
$xcrud3->route('multi-customers');
$xcrud3->title('Customers');

?><main>
    <section>
        <h2>Orders</h2>
        <?php echo $xcrud1->render(); ?>
    </section>

    <section>
        <h2>Payments</h2>
        <?php echo $xcrud2->render(); ?>
    </section>

    <section>
        <h2>Customers</h2>
        <?php echo $xcrud3->render(); ?>
    </section>
</main>

Una página que monta varios widgets así produce su propia salida HTML completa (en lugar de simplemente configurar un único $xcrud para el envoltorio automático del router) - la misma forma que ya usan pages/multi.php y pages/admin.php. Una característica menor e inofensiva de llamar a ->render() más de una vez en una página: las propias etiquetas <link>/<script> de CSS/JS del tema de cada llamada se emiten de nuevo - los navegadores deduplican bien un src/href idéntico, es solo un poco de marcado redundante.

Por qué esto importa

Antes de que se corrigiera este comportamiento, get_instance() devolvía el mismo objeto cada vez, así que una segunda llamada a ->table() mutaba la misma instancia que ya había configurado el primer widget - no solo cambiando a qué tabla apunta, sino dejando también pegado cualquier otro ajuste ya acumulado (columns(), highlight(), etc.) de la primera configuración. Que cada llamada sea una instancia nueva es lo que permite que widgets independientes coexistan de forma segura en una página.