Menu¶
Oltre al file main.py
, ogni package presenta un file menu.py
, che permette di definire la struttura dei menu, ovvero le pagine dell’applicativo che verranno mostrate nell’apposito menu visibile in tutti gli applicativi Genropy.
Ogni package avrà quindi un suo menu specifico, contenente webpages, thpages, ecc, interne al package o riferite a risorse contenute in altri package.
Qualora nell” istanza (o nel siteconfig) sia stato identificato un mainpackage
, questo sarà responsabile di definire il menu principale del progetto:
<site>
<wsgi mainpackage="sandbox"/>
</site>
Suggerimento
Se non si indica un mainpackage o il mainpackage non ridefinisce dei menu specifici, è possibile visualizzare i menu di tutti i package specificando:
<menu package='*'>
Si noti che visitando l’url http://localhost/nomedelpackage
, per ogni package sarà presentato il menu di default di quel package, se è presente un file index.py per quel package.
Suggerimento
Si tenga presente che, a prescindere da cosa viene indicato nel menu, ogni webpage sarà sempre raggiungibile dall’url http://localhost/nomedelpackage/nomedellawebpage
Come definire un menu: Menu¶
La classe Menu¶
Per definire un menu in un package Genropy, si definisce una classe Menu
, all’interno della quale si specifica il contenuto in un metodo config
, che riceve self e root:
class Menu(object):
def config(self,root):
fatturazione = root.branch(u"Fatturazione")
fatturazione.thpage(u"Fatture", table="fatt.fattura")
fatturazione.webpage('Hello',filepath='hello_world')
fatturazione.tableBranch('Ultime fatture',table='fatt.fattura',
query_limit=5,
query_order_by='$protocollo desc',
cacheTime=5)
fatturazione.packageBranch('Gestione utenti',pkg='adm',
branchMethod='userSubmenu',
branch_parametro=3)
fatturazione.lookupBranch(u"Tabelle Ausiliarie", pkg="fatt")
Come si può notare dall’esempio, Menu
è quindi una tipica Structure di Genropy, all’interno della quale è possibile utilizzare diversi strumenti:
i
branch
, ovvero dei rami per raccogliere una serie di vocile thpage , ovvero il riferimento a delle risorse th
le webpage , ovvero delle pagine specifiche, identificate da un percorso
i tableBranch , ovvero rami di record di tabella generati automaticamente
i packageBranch , ovvero rami di tabelle di package generati automaticamente
i lookups , per raccogliere le tabelle di Lookup
dei metodi , usati per definire in tutto o in parte dei menu personalizzati
Le classi ApplicationMenu e WebAppMenu¶
Si noti che la classe Menu è quella dove verrà definito il menu del package. Ma se il package è anche il mainpackage che abbiamo specificato nella configurazione dell’istanza, come indicare le altre voci di menu non direttamente di questo package che vogliamo visualizzare?
In questo caso è possibile specificare nel file menu un’altra classe:
class ApplicationMenu(object):
def config(self,root):
root.packageBranch('Sistema', pkg='sys')
root.packageBranch('Admin', pkg='adm')
root.packageBranch('Fatturazione', pkg='fatt')
In questo modo il menu dell’applicativo sarà questo ApplicationMenu
costituito da tre rami, uno dei quali è quello definito nella classe Menu di fatturazione, definito sopra.
Inoltre, è possibile definire un’altra classe ancora, riservata alle applicazioni mobile:
class WebAppMenu(object):
def config(self,root):
root.packageBranch('Fatturazione', pkg='fatt')
root.packageBranch('Agenti', pkg='agt')
Ogni qualvolta il sistema riconoscerà un dispositivo mobile offrirà questo menu invece del precedente.
Menu differenziati per gruppi di utenza¶
Oltre al metodo di default config
è possibile specificare dei metodi personalizzati riferiti a specifici gruppi di utenza, identificati dal decoratore metadata:
@metadata(group_code='AGT')
def config_agenti(self,root):
fatturazione = root.branch(u"Fatturazione")
fatturazione.thpage(u"Fatture agenti", table="fatt.fattura")
Ad ogni utente appartenente al gruppo specificato (in questo caso AGT
), quindi, verrà mostrato il menu specificato al posto di quello standard. Ciò permette di attribuire un notevole grado di personalizzazione all’applicativo.
Definire il menu da interfaccia¶
Oltre alla modalità sopra descritta, si noti che è sempre possibile costruire un menu direttamente tramite interfaccia dalla sezione Gruppo di Utenza dell’applicativo. Qualora fossero previsti menu costruiti con entrambe le modalità, quella da interfaccia prevarrà sempre su quella costruita via codice.
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”) |
Autore della sezione: Davide Paci