4. Cosa é un modulo?
In OpenERP é una cartella con dentro dei file
specifici:
○ __init__.py
○ __openerp__.py
○ file python (optional)
○ file xml, csv, etc (optional)
Nel mondo Python si chiamano “pacchetti”
(package) o EGGs, ma sono strutturati
diversamente: sono installabili, hanno una
versione, etc.
5. Cosa é un modulo “web”?
Sempre una cartella con dentro gli stessi file,,
più qualche altro:
○ __init__.py
○ __openerp__.py
○ file Python (optional)
○ file XML, CSV, etc (optional)
○
○
○
file Javascript (optional)
file CSS (optional)
file QWEB (xml) (optional)
6. Parametri del modulo web
●
js: lista di path a risorse statiche javascript
Es: [ 'static/src/js/lib.js', ]
●
css: lista di path a risorse statiche CSS
Es: [ 'static/src/css/color.css', ]
●
qweb : lista di path a risorse statiche di tipo XML
Es: ['static/src/xml/lib.xml']
●
web_preload: booleano che dichiara che il modulo
deve essere caricato all’avvio del server
ATTUALMENTE NON UTILIZZATO, PARE :S
NOTA: per la 6.1 questo parametro non esiste, bisogna
lanciare openerp con “--load=web,nome_modulo”
8. A mano
Procedura tipica:
1.
troviamo un modulo esistente
2.
facciamo copia/incolla (o “cp -r” ;))
3.
eliminiamo le cose che non ci servono
4.
aggiungiamo le cose che ci servono
5.
facciamo un bel find/replace
RISULTATO:
●
tempo perso
●
possibilitá di errore piú alta
●
ritorno al tempo della pietra :)
9. Bootstrap automatico
non sarebbe bello poter generare, con un
semplice comando, lo scheletro di un modulo a
partire da un template prestabilito?
La risposta é:
openerp_bootstrap
questo si… un modulo Python :)
11. Installazione
https://pypi.python.org/pypi/openerp_bootstrap/
> pip install openerp_bootstrap
Una volta installato, avrete a disposizione un nuovo comando:
paster e dei template relativi ad openerp.
Paster deriva da Paste, un pacchetto python che consente di
generare, per l’appunto, scheletri di progetti. Per elencare i
template:
> paster create --list-templates
12. I template: creare modulo standard
> paster create -t openerp_newmodule
Questo comando crea uno scheletro per un
modulo standard. Attualmente questo include
semplicemente un file __init__.py e un
__openerp__.py contenente i parametri inseriti in
fase di creazione.
13. I template: creare modulo web
> paster create -t openerp_webmodule
Questo comando crea uno scheletro per un
modulo web. Vediamo meglio cosa succede…
17. Client web: come funziona?
Il client web é dviso sostanzialmente in due parti: client e
server :)
“Lato client” é scritto in javascript.
Tutto ció che é “visibile” é sostanzialmente:
●
un “widget”, un oggetto che estende
instance.web.Widget (tipo la sidebar)
Ad ogni widget é associato un template.
●
una “view”, un oggetto che estende
instance.web.View (list, tree, form, search, etc)
18. Client web: come funziona?
● widget e view interagiscono col server
tramite chiamate AJAX
● “lato server” i controllers si occupano
di restituire i dati a tali chiamate
22. Che cosa è QWEB?
È il sistema di templating del client web.
É un sistema molto modulare che consente di
estendere template esistenti (interamente o in
parte) e include anche l’internazionalizzazione.
Non ha applicazione al di fuori di OpenERP
quindi non ha una community di supporto e non
esiste una documentazione esaustiva (nel trunk
sta cambiando).
L’autore é Antony Lesuisse (OpenERP CTO).
**
25. Come trovare il template?
I template base di OpenERP stanno nel modulo
web “web” :)
Per la precisione li trovate nel seguente path:
web/addons/web/static/src/xml/base.xml
Purtroppo (o per fortuna) stanno tutti nello
stesso file :S
TIP: usate firebug (o altro inspector del browser) per trovare un
riferimento univoco nell’html e poi cercate dentro base.xml
26. Come sovrascrivere un template?
Esempio dal modulo web_nocreatedb:
T-EXTEND
seleziona il
template da
estendere
T-JQUERY
selettore jquery per
selezionare uno specifico
elemento (!!!)
T-OPERATION
operazione da effetturare
sull’elemento selezionato
OPZIONI
before
after
append
replace
web_nocreatedb/static/src/xml/web_nocreatedb.xml
28. Trovare quello che ci serve
●
documentazione1 migliorata molto ma
ancora incompleta
●
nessuna lista di widget
●
o di composizione delle viste
TIP: usate firebug (o altro inspector del browser) per
trovare un riferimento univoco nell’html, cercate il
template contenente il riferimento, infine cercate nel JS il
widget che richiama quel template.
1
https://doc.openerp.com/trunk/web/
29. Estendere viste o widget
Esempio dal modulo web_export_view:
web_export_view/static/js/web_advanced_export.js
30. Estendere viste o widget 2
Esempio dal modulo web_export_view:
web_export_view/static/xml/web_advanced_export.xml
33. Controllers
La parte “lato server” del client web é gestita da
controllers.
I controllers non sono altro che dei metodi
Python che vengono “esposti” tramite una route
(o path).
Una route non é altro che un modo per definire
un URL, banalmente:
www.server.com/path/to/something
38. Tips
●
greppare greppare greppare
●
guardare cosa fanno gli altri
●
cercare su stackoverflow
○
“How to start developing in web addons”
http://stackoverflow.com/a/11950556
●
cercare su OpenERP help
○
●
http://help.openerp.com/questions/
usare FireBug (o simili)