Upload
odoo-italia
View
266
Download
0
Embed Size (px)
DESCRIPTION
by Simone Orsi
Citation preview
Sviluppare moduli per il client web
abstract per OpenERP day IT [email protected] /
Chi sono
Simone Orsi
Web developer
@ Abstract
Plone contributor
OpenERP contributor
Autore di:report_openoffice / Aerooweb_export_view...
CHE COSA È UN MODULO?
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.
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)
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”
COME INIZIARE?
A manoProcedura 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 :)
Bootstrap automaticonon 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 :)
OPENERP_BOOTSTRAP
Installazionehttps://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
I template: creare modulo standard
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.
> paster create -t openerp_newmodule
I template: creare modulo web
Questo comando crea uno scheletro per un
modulo web. Vediamo meglio cosa succede…
> paster create -t openerp_webmodule
metadati
opzioni web
Struttura
Contenuto JS
__openerp__.py
Il nostro nuovo modulo
IL CLIENT WEB,QUESTO SCONOSCIUTO
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)
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
PERSONALIZZARE I TEMPLATE
Come sono fatti i template?
I template del client web sono un
misto di:
HTML
<div class=”foo”>...</div>
e
QWEB
<t t-name="Login">
ASPETTA... QWEB???
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).
****
Esempio template QWEB: login form
PERSONALIZZARE TEMPLATE 2
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
Come sovrascrivere un template?Esempio dal modulo web_nocreatedb:
web_nocreatedb/static/src/xml/web_nocreatedb.xml
T-EXTENDseleziona il template da estendere
T-JQUERYselettore jquery per
selezionare uno specifico elemento (!!!)
T-OPERATIONoperazione da effetturare sull’elemento selezionato
OPZIONIbeforeafter
appendreplace
PERSONALIZZARE IL JAVASCRIPT
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/
Estendere viste o widgetEsempio dal modulo web_export_view:
web_export_view/static/js/web_advanced_export.js
Estendere viste o widget 2Esempio dal modulo web_export_view:
web_export_view/static/xml/web_advanced_export.xml
Creare viste o widget (trunk docs)
INTERAZIONECON IL SERVER
ControllersLa 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
Creare nuovi controllersEsempio dal modulo web_export_view:
web_export_view/controllers.py
Creare nuovi controllers (trunk docs)
Creare nuovi controllersEsempio dal modulo web_export_view:
web_export_view/static/js/web_advanced_export.js
SUGGERIMENTI
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)
RIFERIMENTI
Qualche link utile
● http://pypi.python.org/pypi/openerp_bootstrap/
● https://github.com/simahawk/openerp_bootstrap
● https://code.launchpad.net/~webaddons-core-
editors/web-addons/
● https://doc.openerp.com/
DOMANDE?