初次使用 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 方法