Odoo menyediakan kerangka kerja pengembangan web, untuk mengembangkan fitur-fitur web yang terintegrasi erat dengan aplikasi backend. Kita akan mengambil langkah pertama membuat halaman web sederhana untuk menampilkan daftar buku aktif di perpustakaan kita.
Halaman katalog ebook akan merespons permintaan web di alamat http://yourserver/library/books, jadi /library/books adalah URL yang ingin kita implementasikan.
Controler web adalah komponen yang bertanggung jawab untuk merender halaman web. Sebuah kontroler adalah metode Python dalam sebuah kelas yang diturunkan dari "http.Controller". Metode tersebut terikat dengan satu atau lebih URL menggunakan @http.route kontroler. Ketika salah satu dari URL ini diakses, kode kontroler dieksekusi dan mengembalikan HTML yang akan ditampilkan kepada pengguna. Render HTML biasanya dilakukan menggunakan mesin templating QWeb.
Menambahkan URL didalam Controller:
+ Untuk menambahkan kontroler, pertama-tama edit file library_app/init.py untuk mengimpor juga subdirektori /controllers, seperti berikut:
from . import models
from . import controllers
+ Tambahkan file library_app/controllers/init.py sehingga direktori ini dapat diimpor ke Python, dan tambahkan pernyataan impor untuk file main.py yang akan kita implementasikan kontrolernya, seperti berikut:
\# library_app/controllers/__init__.py
from . import main
Berikut adalah contoh kode untuk file pengontrol , library_app/controllers/main.py:
from odoo import http class Books(http.Controller):
@http.route("/library/books")
def list(self, \*\*kwargs):
Book = http.request.env["library.book"]
books = Book.search([])
return http.request.render("library_app.book_list_template",{"book"': books] )
Pada baris pertama, kita mengimpor modul odoo.http
, yang merupakan komponen inti dari kerangka kerja Odoo yang menyediakan fitur terkait web. Selanjutnya, kita membuat sebuah kelas objek kontroler, yang diturunkan dari http.Controller
.
Pada ID nama tertentu yang kita pilih untuk kelas dan metodenya tidak relevan. Decorator @http.route penting karena mendeklarasikan titik akhir URL yang akan diikat - dalam kasus ini, /books. Untuk saat ini, halaman web menggunakan kontrol akses default dan memerlukan login pengguna.
Dalam metode kontroler, kita dapat mengakses lingkungan jalankan menggunakan http.request.env. Kita menggunakannya untuk mendapatkan recordset dengan semua buku aktif dalam katalog.
Langkah terakhir adalah menggunakan http.request.render() untuk memproses template QWeb library_app.index_template dan menghasilkan output HTML. Kita dapat membuat nilai-nilai tersedia untuk template melalui sebuah kamus, dan ini digunakan untuk meneruskan recordset buku.
Jika sekarang kita me-restart server Odoo untuk me-reload kode Python dan mencoba mengakses URL /library/books, kita seharusnya mendapatkan pesan kesalahan di log server: ValueError: External ID not found in the system: library_app.book_list_template. Ini diharapkan karena kita belum mendefinisikan template tersebut. Langkah selanjutnya adalah melakukan apa?
Menambahkan Qweb Template:
Template QWeb juga disimpan bersama dengan tampilan Odoo lainnya, dan file data yang sesuai biasanya disimpan dalam subdirektori /views. Mari tambahkan file views/book_list_template.xml, sebagai berikut:
<odoo>
<template id="book_list_template" name="Book List">
<div id="wrap" class="container">
<h1>Books</h1>
<t t-foreach="books" t-as="book">
<div class="row">
<span t-field="book.name" />,
<span t-field="book.date_published" />,
<span t-field="book.publisher_id" />
</div>
</t>
</div>
</template>
</odoo>
Elemen <template>
mendeklarasikan sebuah template QWeb. Sebenarnya, ini adalah pintasan untuk sebuah rekaman ir.ui.view, model dasar di mana template disimpan. Template tersebut berisi HTML yang akan digunakan dan menggunakan tag dan atribut khusus QWeb.
Atribut t-foreach digunakan untuk mengulang melalui item-item dalam variabel books yang tersedia untuk template melalui panggilan http.request.render() dari kontroler. Atribut t-field mengatur tampilan konten dari sebuah bidang rekaman Odoo.
File data template QWeb perlu dideklarasikan dalam manifesto modul, seperti halnya dengan file data XML lainnya, agar dapat dimuat dan tersedia. Jadi, file manifest.py harus diedit untuk menambahkannya, seperti ditunjukkan berikut ini:
"data": [
"security/library_security.xml",
"security/ir.model.access.csv",
"views/book_view.xml",
"views/library_menu.xml",
"views/book_list_template.xml",
],
Setelah mendeklarasikan file XML dalam manifesto dan melakukan upgrade modul, halaman web seharusnya berfungsi. Membuka URL http://<yourserver>:8069/library/books dengan login Odoo yang aktif seharusnya menampilkan daftar sederhana dari buku-buku yang tersedia.