.. _tutor/architettura/menu/menu_methods: Uso dei metodi ============== Metodi menu_ automatici ----------------------- Nella `Table `_ è possibile specificare dei metodi ``menu_``, che permetteranno di effettuare modifiche al contenuto o al layout delle voci di menu. menu_dynamicMenuContent ~~~~~~~~~~~~~~~~~~~~~~~ Il primo metodo di hook a disposizione può essere usato per gestire il contenuto dinamico del menu tramite delle `query `_. Queste permetteranno quindi di modificare sempre il set di valori indipendentemente da ciò che verrà poi specificato nel menu:: def menu_dynamicMenuContent(self,**kwargs): return self.query(**kwargs).fetch() Ad esempio:: def menu_dynamicMenuContent(self,**kwargs): return self.query(where='$data=:this_month', this_month=self.db.workdate.month).fetch() permetterà di effettuare la query sule fatture di questo mese su tutte le voci di menu che utilizzano dei :ref:`tableBranch` sulla tabella dove è stato ridefinito il metodo. menu_dynamicMenuLine ~~~~~~~~~~~~~~~~~~~~ Alternativamente, un altro metodo di hook *menu_* può essere utilizzato per personalizzare la *label* del menu dinamico:: def menu_dynamicMenuLine(self,record): return {'label':record.get(self.attributes.get('caption_field','pkey'))} branchId ~~~~~~~ Inoltre, ogni metodo *menu_* può essere ulteriormente personalizzato se seguito da un ``_nomeapiacere``:: def menu_dynamicMenuContent_bianchi(self,**kwargs): return self.query(where="$data=:this_month AND $cliente='Bianchi'", this_month=self.db.workdate.month).fetch() Così facendo sarà possibile anche specificare di volta in volta quale variante del metodo usare con l'attributo ``branchId``:: class Menu(object): def config(self,root): fatturazione = root.branch(u"Fatturazione") fatturazione.tableBranch('Ultime fatture', table='fatt.fattura', query_limit=5, query_order_by='$protocollo desc', cacheTime=5, branchId='bianchi') Metodi personalizzati --------------------- È infine possibile specificare metodi totalmente personalizzati per costruire i menu in maniera dinamica, ad esempio:: def menuPerTipoCliente(self,root,**kwargs): tipi_cli = self.query(columns="""@cliente_id.cliente_tipo_codice AS tipo_cli_codice, @cliente_id.@cliente_tipo_codice.descrizione AS tipo_cli_desc""", distinct=True).fetch() for r in tipi_cli: root.tableBranch(r['tipo_cli_desc'],table='fatt.fattura', query_limit=3,query_order_by='$protocollo desc', query_where='@cliente_id.cliente_tipo_codice=:cl', query_cl=r['tipo_cli_codice'],cacheTime=5) L'esempio considerato permetterà di mostrare le ultime 3 fatture emesse per tipo di cliente, creando un ramo per ogni categoria disponibile. Si noti che in questo caso sarà necessario specificare il metodo da usare nel parametro ``branchMethod``. .. raw:: html
**Parametri:** +------------------------+------+--------------------------------------------------+ | Nome parametro | Tipo | Descrizione | +========================+======+==================================================+ |checkpref |T |Permette di mostrare la voce di menu o il branch | | | |solo se rispettata una determinata condizione | | | |espressa nelle preferenze, nella forma | | | |"pkg.nomepreferenza" (es: | | | |checkpref='adm.gestione_utenti_nel_menu') | +------------------------+------+--------------------------------------------------+ |checkenv |T |Permette di mostrare la voce di menu o il branch | | | |solo se rispettata una determinata condizione | | | |espressa nell'environment (es: | | | |checkenv='deposito_id') | +------------------------+------+--------------------------------------------------+ |newPanel |B |Se impostato a True la voce di menu si aprirà in | | | |un nuovo tab del browser | +------------------------+------+--------------------------------------------------+ |newWindow |B |Se impostato a True la voce di menu si aprirà in | | | |una nuova finestra del browser | +------------------------+------+--------------------------------------------------+ | *Common Parameters* | +------------------------+------+--------------------------------------------------+ |label |T |Solitamente implicito, si riferisce all'etichetta | | | |della voce di menu | +------------------------+------+--------------------------------------------------+ |tags |T |Permette di indicare i tag utente a cui le pagine | | | |sono riservate (es: tags='admin') | +------------------------+------+--------------------------------------------------+ .. sectionauthor:: Davide Paci