Più Widget su Una Pagina
Monta due o più griglie Xcrud indipendenti affiancate su un'unica pagina con Xcrud::get_instance().
get_instance() non è un vero singleton
Nonostante il nome (mantenuto per compatibilità retroattiva con il get_instance() del vecchio xCrud), ogni chiamata a Xcrud::get_instance() restituisce un'istanza nuova di zecca, configurata in modo indipendente - mai una condivisa. È questo che rende sicuro montare più widget su una pagina: configurare table()/colonne/opzioni del secondo widget non si propaga mai al primo.
Esempio: due griglie su una pagina
Ogni widget ha bisogno di un proprio table() e, in modo critico, di un proprio valore route() univoco - la rotta è ciò che il widget lato client usa per indirizzare le proprie chiamate AJAX, quindi due widget che condividono una rotta entrerebbero in collisione:
$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 pagina che monta più widget come questa produce un proprio output HTML completo (invece di configurare semplicemente un $xcrud per l'incapsulamento automatico del router) - la stessa struttura già usata da pages/multi.php e pages/admin.php. Una caratteristica minore e innocua di chiamare ->render() più di una volta su una pagina: i tag <link>/<script> del CSS/JS del tema di ogni chiamata vengono emessi di nuovo - i browser deduplicano correttamente un src/href identico, è solo un po' di markup ridondante.
Perché è importante
Prima che questo comportamento venisse corretto, get_instance() restituiva lo stesso oggetto ogni volta, quindi una seconda chiamata a ->table() avrebbe modificato la stessa identica istanza già configurata dal primo widget - non limitandosi a cambiare quale tabella punta, ma lasciando anche attaccata ogni altra impostazione già accumulata (columns(), highlight(), e così via) dalla prima configurazione. Il fatto che ogni chiamata sia un'istanza nuova è ciò che permette a widget indipendenti di coesistere in sicurezza su una pagina.