使用者故事
建立一個圖書館網站,供查詢現有圖書
1.建立網頁
2.表列現有圖書
3.點選圖書後可查看圖書詳細內容
在 Odoo 中,我們可以使用 website
模組來建立網站頁面。我們需要擴展現有的模組,添加網站控制器和模板。
首先,確保您的模組依賴於 website
模組。
在 __manifest__.py
中添加依賴:
'depends': ['base', 'mail', 'website'],
我們需要建立一個控制器,處理網頁的路由,並在模板中顯示現有的圖書列表。
在您的模組目錄下,創建一個 controllers
目錄(如果尚未存在),並在其中添加一個 controllers.py
文件。
controllers/controllers.py
from odoo import http
from odoo.http import request
class LibraryWebsite(http.Controller):
@http.route(['/library/books'], type='http', auth='public', website=True)
def list_books(self, **kwargs):
books = request.env['library.book'].search([])
return request.render('your_module.library_book_list_template', {
'books': books,
})
@http.route(['/library/book/<model("library.book"):book>'], type='http', auth='public', website=True)
def view_book(self, book, **kwargs):
return request.render('your_module.library_book_detail_template', {
'book': book,
})
@http.route
裝飾器定義了 URL 路由。list_books
方法處理 /library/books
路徑,查詢所有的圖書,並渲染模板。view_book
方法處理 /library/book/<id>
路徑,顯示特定圖書的詳細信息。確保在 controllers
目錄下有 __init__.py
文件,並導入 controllers.py
:
在您的模組目錄下,創建一個 views
目錄(如果尚未存在),並在其中添加模板文件。
views/library_book_templates.xml
<odoo>
<template id="library_book_list_template" name="Library Book List">
<t t-call="website.layout">
<div class="container mt-5">
<h1 class="mb-4">圖書列表</h1>
<ul class="list-group">
<t t-foreach="books" t-as="book">
<li class="list-group-item">
<a t-att-href="'/library/book/%s' % book.id">
<t t-esc="book.name"/>
</a>
</li>
</t>
</ul>
</div>
</t>
</template>
<template id="library_book_detail_template" name="Library Book Detail">
<t t-call="website.layout">
<div class="container mt-5">
<h1><t t-esc="book.name"/></h1>
<p><strong>作者:</strong> <t t-esc="book.author"/></p>
<p><strong>ISBN:</strong> <t t-esc="book.isbn"/></p>
<p><strong>分類:</strong> <t t-esc="book.category_id.name or '未分類'"/></p>
<p><strong>狀態:</strong>
<t t-if="book.is_borrowed">已借出</t>
<t t-else>可借閱</t>
</p>
<a href="/library/books" class="btn btn-secondary mt-3">返回圖書列表</a>
</div>
</t>
</template>
</odoo>
library_book_list_template
模板用於顯示圖書列表,每個圖書項目都鏈接到其詳細頁面。library_book_detail_template
模板用於顯示圖書的詳細信息。權限:我們在路由中使用了 auth='public'
,表示任何人都可以訪問。如果您希望限制訪問,可以將 auth
參數設置為 user
,這樣只有登入的用戶才能訪問。
模板的調整:您可以根據需要美化模板,添加更多的樣式和內容。可以使用 Bootstrap 等框架進行排版。
多語言支持:如果需要支持多語言,可以使用 Odoo 的翻譯機制。在模板中使用 _()
方法標記需要翻譯的文本。
修改控制器
class LibraryWebsite(http.Controller):
@http.route(['/library/books'], type='http', auth='public', website=True)
def list_books(self, search='', **kwargs):
domain = []
if search:
domain += ['|', '|',
('name', 'ilike', search),
('author', 'ilike', search),
('isbn', 'ilike', search)]
books = request.env['library.book'].search(domain)
return request.render('your_module.library_book_list_template', {
'books': books,
'search': search,
})
修改模板
<odoo>
<template id="library_book_list_template" name="Library Book List">
<t t-call="website.layout">
<div class="container mt-5">
<h1 class="mb-4">圖書列表</h1>
<form method="get" action="/library/books">
<div class="input-group mb-3">
<input type="text" name="search" class="form-control" placeholder="搜尋書名、作者或ISBN" t-att-value="request.params.get('search')"/>
<div class="input-group-append">
<button class="btn btn-primary" type="submit">搜尋</button>
</div>
</div>
</form>
<ul class="list-group">
<t t-foreach="books" t-as="book">
<li class="list-group-item">
<a t-att-href="'/library/book/%s' % book.id">
<t t-esc="book.name"/>
</a>
</li>
</t>
<t t-if="not books">
<li class="list-group-item">沒有找到相關的圖書。</li>
</t>
</ul>
</div>
</t>
</template>
</odoo>
在本章中,我們建立了一個圖書館網站,供用戶查詢現有的圖書,並詳細了解每本書的資訊。我們主要完成了以下幾個步驟:
透過擴展 Odoo 的 website
模組,我們為圖書館系統新增了網站功能。在模組的 __manifest__.py
中,我們添加了對 website
的依賴,讓我們可以利用 Odoo 的網站框架建立前端頁面。
本章著重介紹了如何在 Odoo 中使用前台網站功能,為用戶提供友好的圖書查詢介面。透過 Odoo 的 website
模組,我們可以:
建立自定義的網站頁面:利用控制器和模板,我們可以自定義網站的各個頁面,滿足特定的業務需求。
與模型數據交互:在控制器中,我們可以訪問 Odoo 的模型數據,將後端的資料展示在前端頁面上。
使用 QWeb 模板語言:QWeb 是 Odoo 的模板引擎,支持動態渲染和模板繼承,方便我們構建複雜的網頁。
整合搜尋功能:我們還可以在頁面上添加搜尋功能,讓用戶能夠快速找到他們感興趣的圖書。
https://github.com/kulius/odoo17_ithelp