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.