初次使用 Odoo 來製做網站,因Odoo自帶代碼塊效果單一,沒法知足當前網站展現效果,須要對當前代碼塊進行添加或擴展。而這個代碼塊是屬於網站中的佈局設計這一塊,Odoo 將全部的佈局以及邏輯行爲,都「模塊化」了。Odoo 建立佈局同Html不同,是一個徹底的視角改變,從視覺上看,建立的佈局,可讓用戶 「拖拽」 到頁面中任意位置並對它進行編輯。Odoo 佈局就是一個模塊化的佈局,目標就是樣式化這些元素來達到一個比較完美的效果。css
odoo 始於 XML 規範,全部的代碼都必須在 <odoo></odoo> 標籤內完成html
<?xml version="1.0" encoding="utf-8" ?> <odoo> ## YOUR CODE </odoo>
建立佈局結構,都必須在 <template></template> 標籤內完成,若是當前 template 是網頁,則必需要給當前 template 添加一個 page="True" 的屬性web
<?xml version="1.0" encoding="utf-8" ?> <odoo> <!-- === Template === --> <template name="Services page" id="website.services" page="True"> <h1>Our Services</h1> <ul class="services"> <li>Cloud Hosting</li> <li>Support</li> <li>Unlimited space</li> </ul> </template> </odoo>
建立一個主題或是叫建立一個代碼塊,如下文件必不可少:服務器
static(JS / CSS / IMG)
與 views(XML 文件) 目錄
編輯__manifest__.py,這些值將在 odoo 的後臺中對主題進行標識:app
{ 'name': 'Tutorial theme', //主題名稱 'description': 'A description for your theme.', //主題描述 'version': '1.0', //主題版本 'author': 'Your name', //主題做者 'data': [ //包含 XML 文件列表 ], 'category': 'Theme/Creative', //模塊或是主題的分類,(老是爲「Theme」)而且跟着下劃線和子分類,可使用一個Odoo應用類別列表中的子分類(https://www.odoo.com/apps/themes)。 'depends': ['website'], //指定主題須要依賴的模塊,對於網站中的主題,只須要依賴website,若是須要博客和電商功能,則須要這樣寫:['website','website_blog','sale'] }
依照官方文檔,只須要把主題目錄放置到Odoo安裝的插件目錄中便可,Odoo12 的插件目錄爲 addons。可是在實際操做中存放咱們本身的插件目錄,是不能夠直接將插件放入 addons 中的,緣由以下:less
咱們只是增長存放插件(addons)的路徑,並無替換以前的插件(addons)路徑。咱們得在原有的存放插件文件夾addons同級目錄下新建了另外一個存放插件的文件夾myaddons。爲何要新建另外一個文件夾myaddons來存放插件呢?由於,以前的文件夾addons下面已經安裝了不少系統自帶的插件,而咱們後續會自主開發部分插件和使用第三方插件,是不想把這些插件與系統自有的插件混淆,引發一些不可預估的問題。frontend
新建好 myaddons 後,須要對Odoo server 12重啓,新增插件路徑只有從新 odoo 服務器才能生效。重啓命令以下:ide
sudo /etc/init.d/odoo restart
重啓以後,新增的存放插件文件夾 myaddons 纔會生效!模塊化
經過自定義的插件文件夾 myaddons。測試安裝一個插件叫「web_responsive」它主要實現一個響應式的效果,便可以方便PC、平板、手機等設備上更加便捷的使用Odoo 12,步驟爲:佈局
<odoo>
中建立一個<template>
標籤,設置 page
屬性爲 True
,並添加代碼到 template 中。<?xml version="1.0" encoding="utf-8" ?> <odoo> <!-- === Template === --> <template name="Services page" id="website.services" page="True">
<div id="wrap"> <div class="container"> <h1>Our Services</h1> <ul class="services"> <li>Cloud Hosting</li> <li>Support</li> <li>Unlimited space</li> </ul> </div> </div>
</template> </odoo>
'data':[ 'views/layout.xml', 'views/pages.xml' ],
在當前 views 目錄下新建一個 assets.xml的XML文件,添加默認的XML標記並複製/粘貼下面的代碼。記得把 theme folder
替換爲您主題的主目錄名稱。
<template id="mystyle" name="My style" inherit_id="website.assets_frontend"> <xpath expr="link[last()]" position="after"> <link href="/theme folder/static/less/style.less" rel="stylesheet" type="text/less"/> </xpath> </template>
參數說明:
expr="link[last()]"
和
position="after"
意思是將 style.scss 這個文件添加到資產列表的最後一個連接以後
/yourwebsite/page/services
瀏覽它。
它的目的是能夠經過用戶使用網站構建器的用戶界面進行拖拽編輯,到 view 目錄並建立一個名爲 snippets.xml 的XML文件。
添加默認的Odoo XML標記並複製/粘貼下面的代碼,該模板包含由區塊顯示的HTML標記。
在當前 snippets.xml 的XML文件 中須要把上面的代碼塊以縮略圖的方式放置到編輯條中,以便用戶能夠把它拖放到頁面當中。
複製/粘貼下面的代碼到您的snippets.xml文件中:
snippets.xml 這個文件,在實際應用中有至少三種 template 組成:
經過示例看一下經過默認代碼塊選項如何在基本示例中使用:
<template id="snippet_options"> <t t-call="web_editor.snippet_options"/></t> //爲第一個 template 添加基本選項
// data-selector 爲一個選項組中能夠定義多個佈局,當前定義 3 個佈局
// data-select-class 定義當前 class=「align-items-start」 在激活後應用到當前的 a 標籤上 <div data-selector=".s_text_image, .s_image_text, .s_three_columns" data-target=".row"> <div class="dropdown-submenu"> <a tabindex="-2" href="#" class="dropdown-item"><i class="fa fa-arrows-v"/>Alignment</a> <div class="dropdown-menu" role="menu"> <a href="#" class="dropdown-item" data-select-class="align-items-start">Top</a> <a href="#" class="dropdown-item" data-select-class="align-items-center">Middle</a> <a href="#" class="dropdown-item" data-select-class="align-items-end">Bottom</a> <div class="dropdown-divider"/> <a href="#" class="dropdown-item" data-select-class="align-items-stretch">Equal height</a> </div> </div> </div> </template>
每一個人理解的意思不一樣,我理解選項組對應屬性分別爲如下描述:
data-selector="[css selector(s)]"
將包含在組中的全部選項綁定到特定元素
data-select-class="[class name]"
用於在當前節點上,綁定的自定義的 css ,當前節點被激活時,自動激活當前的 class
data-js=" custom method name "
用於在當前節點上綁定自定義的 js 方法,當前節點被激活時,自動激活當前的節點的 js 方法