Tworzenie prostych stron internetowych
Aby stworzyć stronę internetową (frontend) wystarczy zdefiniować jej szablon z pliku XML.
Zacznijmy od zbudowania modułu poleceniem:
./odoo-bin scaffold strona0 edu
Powstanie moduł strona0 w katalogu edu.
W manifeście zmieniamy zależności dodając 'website':
'depends': ['website']
Na końcu dodajemy: 'installable': True,
W pliku views/templates.xml wystarczy tyle:
<odoo>
<data>
<template id="strona0" name="Hello world" page="True">
<div>Hello world</div>
</template>
</data>
</odoo>
Ważne! Zwróć uwagę na page="True".
OK - mamy zaprojektowaną stronę (strona0), ale jak ją wyśiwetlić? URL: /page/strona0.strona0 można wpisać w przeglądarce, albo dodać do menu (treść -> modyfikowanie menu).
Co zrobić, aby nasza strona nie wyświetlała jedynie napisu "Hello world", ale by napis ten obudowany został szablonem?
Trzeba zaipmortować ten szablon (t-call = "website.layout"):
<odoo>
<data>
<template id="strona0" name="Hello world" page="True">
<t t-call = "website.layout">
<div>Hello world</div>
</t>
</template>
</data>
</odoo>
Na koniec możemy dodać menu w pliku XML - by nie musieć dopisywać go samodzielnie. Możemy to dopisać przed </data>:
<record id="sstrona0_link" model="website.menu">
<field name="name">Strona0</field>
<field name="url">/page/strona0.strona0</field>
<field name="parent_id" ref="website.main_menu" />
<field name="sequence" type="int">99</field>
</record>
Stronę możemy także wywołać programowo - poprzez kontroler, Kontrolery Odoo wykorzystują bibliotekę werkzeug (http://werkzeug.pocoo.org/). Z niej pochodzi idea zastosowania dekoratorów do określenia dowolnych adresów URL. Na przykład chcemy aby zamiast /page.strona0.strona0 było to /strinczka. Tworzymy kontroler (controllers.py
):
from odoo import http
class Stroniczka(http.Controller):
@http.route('/stroniczka/',auth='public', website=True)
def index(self,**kw):
return http.request.render('strona0.strona0')
Oczywiście zastosowanie kontrolera jest o wiele szersze niż tylko renderowanie strony według szablonu dla wybranego URL. Do tego tematu jeszcze wrócimy.