想象一下,我們要為特殊功能的頁面建立乙個特定的布局。在這些頁面上,我們需要在頂部新增乙個功能列表,並使用**片段(snippets)讓客戶可以盡可能地設定其他的頁面布局。
在你的view資料夾中,建立乙個
pages.xml
檔案並新增預設
odoo
標記。在「
data
」建立乙個「template」標籤,將page屬性設定為true,並將**新增裡面去。
<?xml version="1.0" encoding="utf-8" ?>
網頁標題將是模板的id。在我們使用services(從website.services)
我們成功地建立了乙個新的頁面布局,但我們還沒有告訴系統如何使用它。要做到這一點,我們可以用qweb。把html**到
標籤裡,如下:
使用我們將使用自己的**擴充套件odoo的預設頁面布局。
我們使用了兩段
**,乙個的id為
wrap
,另乙個是用了container類。這就提供了乙個最小的布局。
下一步是新增乙個空的區域來讓使用者可以填寫。只需在div#wrap元素之前新增乙個oe_structure類的div。
<?xml version="1.0" encoding="utf-8" ?>
提示
你可以建立任意多的**片斷區域並放到你願意放的頁面中。
我們的頁面就快好了。現在我們要做的是在我們的__openerp__.py新增
pages.xml
檔案。
'data': [
'views/layout.xml',
'views/pages.xml'
],
更新你的主題。
好了,我們的服務頁面已經準備好,你可以通過瀏覽**/網頁/服務
/訪問它。
你會注意到**片段(snippets)可以在服務列表中拖放。
再回到pages.xml檔案中,在頁面模板後,複製
/貼上以下**。
services
/page/services
99
此**將在主選單中新增乙個鏈結。
sequence屬性定義了在頂部選單中的鏈結的位置。在我們的示例中,我們將值設定為99,以便將其放置到最後乙個。如果你想把它放在乙個特定的位置,你必須根據實際需要來更改它的值。
你可以看到檢查website模組data.xml檔案,home
鏈結設定為10和contact us是
60。例如,如果你想把你的鏈結放在中間,那麼序列值可以設定為40。
odoo預設使用了
bootstrap
。這意味著,你可以使用所有
bootstrap
的引導樣式和布局功能。
當然了,如果你想採用獨特的設計,bootstrap是不夠的。以下步驟將指導您如何將自定義的樣式(
style
)新增到主題中。最終的效果不會很漂亮,但會讓你了解完整的過程。
我們先建立乙個空檔案,名為style.less,放在乙個名為less的靜態資料夾下。下面的規則將影響服務頁面的樣式。複製並貼上它,然後儲存檔案。
.services
}
樣式檔案已經準備好了,但是主題裡還沒有包含它。
回到view資料夾中並建立乙個assets.xml檔案。新增odoo預設的
xml標記並複製貼上以下**。記得要把theme資料夾替換成自己的主題名稱。
我們剛剛建立了乙個模板,less檔案。你可以看到,模板有乙個特殊的屬性稱為inherit_id。這個屬性告訴
odoo
我們的模板會使用自己的樣式。
在這種情況下,我們指的是assets_frontend模板,位於website模組。assets_frontend指定了website builder要使用的assets位置列表,我們的目標是先把它加進去。
這可以通過使用xpath表示式expr="link[last()]"和position="after"來實現,意思是「把我的style
的檔案放在包含assets清單的的最後」。
把它放在最後乙個,我們確保我們的檔案將被載入在最後,並採取優先權。
最後新增assets.xml到__openerp__.py檔案。
更新你的主題。
我們的less檔案現在包含在我們的主題中,它將自動編譯,壓縮和合併odoo的assets中。
odoo 建立嚮導wizard頁面
幾個小點 1 wizard wizards無所謂 2 臨時模型無需安全規則 因為它們是用於輔助執行的一次性記錄。那麼也就不需要新增security ir.model.access.csv許可權控制列表檔案 首先,from import wizard並在wizards下建立 aa.py 和 aa vi...
odoo 動態建立欄位的方法
動態建立字段並非乙個常見的的需求,但某些情況下,我們確實又需要動態地建立字段。odoo 中建立欄位的方法有兩種,一種是通過python檔案class中進行定義,另一種是在介面上手工建立,odoo通過state欄位對這兩種型別的字段進行區分。通過介面建立的字段必須以x 開頭。筆者曾經試圖通過pytho...
建立特定使用者的程序
用於建立特定使用者的程序,比如在服務程序中建立基於當前使用者的程序等等 bool gettokenbyname handle htoken,lptstr lpname handle hprocesssnap null bool bret false processentry32 pe32 pe32....