.. _widgetpedia/genro/components/templateChunk: templateChunk ============= Il templateChunk è un widget attivabile con una sola riga di codice che permette di mostrare in qualsiasi area di una pagina di Genropy un blocchetto template personalizzabile poi con il `Template Editor `_. Con il templateChunk è possibile richiamare template già esistenti oppure avviarne la creazione direttamente dall'interfaccia. Prendendo quindi a titolo di esempio la table *fattura* di `Sandbox `_, proviamo a modificare l'area di intestazione della fattura per riportare un blocco template in cui mostrare i dati relativi al cliente. Per fare questo sarà sufficiente all'interno della *th_resource* definire un widget di layout e il templateChunk come segue:: def th_form(self, form): bc = form.center.borderContainer() bc.contentPane(region='top').templateChunk(table='fatt.fattura', record_id='^#FORM.record.id', template='dati_cliente', height='150px') self.fatturaRighe(bc.contentPane(region='center')) Nella form di *th_fattura* prima definiamo un :ref:`borderContainer` che andrà a contenere il nostro templateChunk. Nella seconda riga sostituiamo poi la *fatturaTestata* di default con il templateChunk, specificando che dovrà essere collocato nella parte superiore di questo borderContainer e che dovrà avere le seguenti caratteristiche: - la ``table`` (obbligatoria) che lo utilizzerà sarà *fattura* del package *fatt*. Indicheremo in questo campo la tabella da cui reperire i dati attraverso la rete di relazioni (in questo caso, la fattura, attraverso la quale risaliremo ai dati del *cliente*) - il ``record_id`` (obbligatorio), stesso discorso che nel campo precedente, in questo caso essendo nella form il record della fattura che stiamo visualizzando - il ``template`` da utilizzare (facoltativo), possiamo crearlo prima e poi richiamarlo in questa sede o alternativamente dargli un nome qui e definirlo direttamente dall'editor nella form della fattura Se come in questo caso non abbiamo definito precedentemente un template e quindi lo stiamo creando in questo momento, all'apertura di una qualunque fattura ci si presenterà la schermata seguente: .. image:: /_static/images/components/template-not-yet-created.png :width: 100% :align: center A questo punto sarà sufficiente **tenere premuto il tasto shift e fare doppio clic** sull'area indicata per avviare il Template Editor e la creazione del template che verrà salvato nella cartella ``/resources/tables/fattura/tpl/dati_cliente.xml`` (dove *dati_cliente* è il nome del template che abbiamo specificato). Nel `template Editor `_ potremo a questo punto (esattamente come nel caso di creazione template per e-mail o stampe) richiamare qualsiasi tipo di campo dalla tabella o dalle tabelle in relazione. Questo tipo di meccanismo è stato mostrato anche in una delle nostre Genropill: `Come rappresentare i dati di un record in un blocco template `_ .. hint:: Per avviare la creazione e salvare correttamente il template direttamente nella risorsa è fondamentale indicare ``template='nome'`` tra i parametri del templateChunk. Uso nelle webpage ----------------- Si noti innanzitutto che all'interno di un `TableHandler `_ non è necessario eseguire alcuna importazione, mentre per l'utilizzo all'interno di una qualsiasi *webpage* è necessario importare il component:: py_requires="gnrcomponents/tpleditor:ChunkEditor" Inoltre, il *templateChunk* richiede l'inserimento di un *record_id*, di conseguenza è probabile che ci troveremo di fronte alla necessità di portare i dati del record nella pagina tramite un :ref:`elemento Datastore` . Potremmo dunque pensare di attuare una soluzione del genere:: cp = root.contentPane(region='center', datapath='main') provincia_rec = self.db.table('glbl.provincia').recordAs('MI') cp.data('.prov_sigla', provincia_rec['sigla']) cp.templateChunk(table='glbl.provincia', record_id='^.prov_sigla', height='200px', template='provincetpl') Il problema è relativo all'utilizzo di :ref:`data` , che al momento in cui viene servita la pagina ha già effettuato il posizionamento del valore al path indicato, il che **non fa innescare il trigger del templateChunk**. La soluzione da utilizzare è invece la seguente:: cp = root.contentPane(region='center', datapath='main') provincia_rec = self.db.table('glbl.provincia').recordAs('MI') cp.dataFormula('.prov_sigla', 'prov', prov=provincia_rec['sigla'], _onStart=True) cp.templateChunk(table='glbl.provincia', record_id='^.prov_sigla', height='200px', template='provincetpl') .. raw:: html In questo caso usiamo invece un :ref:`dataFormula` , corredato dell'attributo ``_onStart=True``, che ci consente di ottenere lo stesso risultato del caso precedente ma **innescando il trigger nativo del templateChunk**, che ci mostra così la schermata per inserire il template. .. raw:: html
**Parametri:** +------------------------+------+--------------------------------------------------+ | Nome parametro | Tipo | Descrizione | +========================+======+==================================================+ |table |T |La table da cui reperire i dati da inserire nel | | | |template | +------------------------+------+--------------------------------------------------+ |record_id |T |L'id del record di cui mostrare i dati nel | | | |template (obbligatorio, in alternativo a | | | |datasource e dataProvider) | +------------------------+------+--------------------------------------------------+ |template |T |Il template, se inesistente verrà creato con il | | | |nome indicato, se omesso verrà chiamato "default" | | | |(es: template='cliente'). In alternativa, se | | | |specificato il parametro editable, può essere un | | | |path di una bag invece di un nome (es: | | | |template='^.tpl_bag') | +------------------------+------+--------------------------------------------------+ |editable |B |Se uguale a True, invece di creare un file xml con| | | |il nome indicato il template verrà salvato al path| | | |indicato in una bag | +------------------------+------+--------------------------------------------------+ .. sectionauthor:: Davide Paci