Odoo12 之主题创建或扩展
初次使用 Odoo 来制作网站,因Odoo自带代码块效果单一,无法满足当前网站展示效果,需要对当前代码块进行添加或扩展。而这个代码块是属于网站中的布局设计这一块,Odoo 将所有的布局以及逻辑行为,都“模块化”了。Odoo 创建布局同Html不一样,是一个完全的视角改变,从视觉上看,创建的布局,可以让用户 “拖拽” 到页面中任意位置并对它进行编辑。Odoo 布局就是一个模块化的布局,目标就是样式化这些元素来达到一个比较完美的效果。
Odoo 页面规范
odoo 始于 XML 规范,所有的代码都必须在 <odoo></odoo> 标签内完成
- <?xml version="1.0" encoding="utf-8" ?>
- <odoo>
- ## YOUR CODE
- </odoo>
创建布局结构,都必须在 <template></template> 标签内完成,如果当前 template 是网页,则必须要给当前 template 添加一个 page="True" 的属性
- <?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>
注意点
- template 标签只是定义了一段 html 代码
- template 标签在没有和 odoo 建立任何联系之前,都不会在任何位置显示
- 每次修改 XML 文件都会强制重新载入,因为 XML 文件只有安装主题时才会加载
- 可以使用 xpath + qweb 来将 template 与 odoo 进行关联
创建一个主题模块
创建一个主题或是叫创建一个代码块,以下文件必不可少:
- 模块名称,必须以 theme_ 开头
- 模块配置信息,__manifest__.py
- 模块系统文件,__init__.py 可以为空
- 模块的
static(JS / CSS / IMG)
与 views(XML 文件) 目录
编辑__manifest__.py,这些值将在 odoo 的后台中对主题进行标识:
- {
- '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 中的,原因如下:
我们只是增加存放插件(addons)的路径,并没有替换之前的插件(addons)路径。我们得在原有的存放插件文件夹addons同级目录下新建了另一个存放插件的文件夹myaddons。为什么要新建另一个文件夹myaddons来存放插件呢?因为,之前的文件夹addons下面已经安装了很多系统自带的插件,而我们后续会自主开发部分插件和使用第三方插件,是不想把这些插件与系统自有的插件混淆,引起一些不可预估的问题。
新建好 myaddons 后,需要对Odoo server 12重启,新增插件路径只有重新 odoo 服务器才能生效。重启命令如下:
- sudo /etc/init.d/odoo restart
重启之后,新增的存放插件文件夹 myaddons 才会生效!
通过自定义的插件文件夹 myaddons。测试安装一个插件叫“web_responsive”它主要实现一个响应式的效果,即可以方便PC、平板、手机等设备上更加便捷的使用Odoo 12,步骤为:
- 把插件 web_responsive 放在之前新建好的文件夹myaddons下,并解压!解压后可删除压缩包。
- 再登录odoo 12,转到“参数设置”下,激活开发者模式。
- 激活开发者模式之后,转到“应用”下,点击“更新本地模块列表”。
- 更新完本地模块列表之后,需要去掉“应用”筛选项,不去掉,安装的插件“ web_responsive ”不会显示出来,因为插件太多了。
- 安装完成之后,即可使用插件 web_responsive 。
创建一个特殊效果的主题模块
按照步骤建立主题
- 在 views 目录中,创建一个pages.xml 文件并添加默认的Odoo标签。
- 在
<odoo>
中创建一个<template>
标签,设置page
属性为True
,并添加代码到 template 中。 - 并为 template 添加模板 ID以及模板名称
- 预览:
- <?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>
如何让 Odoo 系统使用这个新的主题? 可以使用 QWeb。
- 将HTML代码包裹到一个<t>标签中,例如下面的例子
- 以下例子的意思是,在 website.services 这个模板中,使用 t-call 调用 website.layout 这个子模板,使 layout 文件作为当前模板的最外层结构
- 添加 pages.xml 到我们的__manifest__.py文件中
- '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
浏览它。
创建一个可拖动的主题代码块
- 新建一个 snippets.xml 代码块文件
- 将代码块放置到可拖动的编辑条中
它的目的是可以通过用户使用网站构建器的用户界面进行拖拽编辑,到 view 目录并创建一个名为 snippets.xml 的XML文件。
添加默认的Odoo XML标记并复制/粘贴下面的代码,该模板包含由区块显示的HTML标记。
在当前 snippets.xml 的XML文件 中需要把上面的代码块以缩略图的方式放置到编辑条中,以便用户可以把它拖放到页面当中。
复制/粘贴下面的代码到您的snippets.xml文件中:
snippets.xml 这个文件,在实际应用中有至少三种 template 组成:
- 第一个 template 为布局文件,每个 template 含有两个属性,分别为: id 与 name,由 name 定义该模板的名称
- 第二个 template 为编辑可拖动的代码块列表,通过 xpath 的 t 标签调用第一个 template模板文件,使用 t-snippet 标签与 布局文件中的 id 进行关联来定位特定元素。如果要更改目标选项卡,只需替换xpath表达式中的id值即可。
- 第三个 template 为代码块选项,只有一个 id = "snippet_options" 的属性,选项允许发布者使用网站构建器的UI编辑代码段的外观。
通过示例看一下通过默认代码块选项如何在基本示例中使用:
- <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 方法
Odoo12 之主题创建或扩展的更多相关文章
- 教程:使用Diskpart创建、扩展或删除磁盘分区
在Windows Server环境下进行基本的磁盘操作时,管理员可以使用Disk Partition Utility或Diskpart等工具.后者是一个命令行解释器,可作为磁盘管理工具. 管理员可以使 ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(2)——在GUI中创建基础扩展事件
本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 第一篇文章中提到了如何在Profiler中创建跟踪(trace),并以服务器端(server-side)跟 ...
- Robot Framework - 4 - 创建和扩展测试库的示例
创建和扩展Library的示例 示例:Check status on Linux OS 创建与使用library的基本步骤: 1--- library实现的内容和实现的方式 ...
- 实现自动切换主题的 VSCode 扩展
在白天,我常常需要浅色的 VSCode 主题:在夜间,我常常需要深色的 VSCode 主题.我不希望每天手动切换两次 VSCode 主题,所以我开发了这个可以自动切换主题的 VSCode 扩展 -- ...
- PHP内核的学习--创建PHP扩展
开始看PHP内核也有一段时间了,现在开始边学边总结,今天就总结一下如何创建自己的PHP扩展. 我的环境如下: 系统:Ubuntu 14.04 php版本:5.5.19 参考摘录:用C/C++扩展你的P ...
- LVM 创建分区扩展分区记录
LVM 原理 图片来自百度百科 测试环境centOS 7 LVM version: 2.02.115(2)-RHEL7 (2015-01-28) ...
- 使用ARM和VMSS创建自动扩展的web集群
在很多的商业场景中,用户的访问,峰值时间都是很难预测的,尤其是做一些市场推广活动和促销的时候,到底部署什么规模的web集群合适,这一直是个问题,部署过量会造成高成本和资源不必要的浪费,部署过少,如果到 ...
- 逻辑卷lvm创建、扩展、缩小
系统环境:CentOS Linux release 7.3.1611 (Core) 3.10.0-514.el7.x86_64 CentOS6与7配置方法大同小异.通常是在系统安装的时候创建lvm,然 ...
- 从无到有开发自己的Wordpress博客主题---创建主题
上一篇教程,我们已经安装了Wordpress,我们可以成功的登录到Wordpress后台,接下来的任务就是创建我们自己的主题. 要想创建一个Wordpress主题,就必须按照Wordpress的规则, ...
随机推荐
- 大话Git系列之初识版本控制系统(2)
本次接着上次的来介绍版本控制系统,这个讲到的将是Git与Github,说一下什么是Git,什么是GitHub?他们之间的关系是什么? 1.Git 是代码管理的工具 2.GitHub 是基于Git实现的 ...
- 【H5最强攻略】百度人脸情绪实时识别
最近看的各位大佬都在体验百度大脑2019年全新上线的24项AI能力! (我也按耐不住了,赶紧走一波- 哈哈) 接下来要介绍的就是H5端的人脸检测攻略. 附带详细的介绍,代码,以及演示体验等 欢迎提出各 ...
- Linux下使用 github+hexo 搭建个人博客03-hexo配置优化
上两张文章,我们说了 hexo 部署.主题的切换.博文的创建.MarkDown 简单使用和 hexo 部署到 GitHub Pages. 也说了我们会使用 next 主题做为我们后期博客的使用和维护. ...
- layui 动态设置 checbox 选中状态
layui复选框checkbox选中赋值,解决layui设置checbox选中不生效的问题 直接上代码 //监听指定开关 form.on('switch(dongsir)', function(dat ...
- arp心得-caidachun
arp地址解析协议,以前也学习过,一直有疑问,不同网段怎么解析,arp代理是什么,静态路由为什么可以配置下一跳是接口,而不是ip 1.同网段广播请求,单播应答 2.不同网络根据路由表的下一跳地址ip地 ...
- 04. Go 语言流程控制
Go 语言流程控制 流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的"经脉". Go 语言的常用流程控制有 if 和 for,而 switch 和 ...
- 【UOJ276】【清华集训2016】汽水(分数规划+点分治)
点此看题面 大致题意: 给你一棵树,要求你选择一条树上路径,使得这条路径上边权的平均值与定值\(k\)的差的绝对值最小.求出这个最小值. 分数规划 看到平均值,首先就应该想到分数规划吧. 我们二分答案 ...
- LOJ6033「雅礼集训 2017 Day2」棋盘游戏 (博弈论,二分图,匈牙利算法)
什么神仙思路啊-- 看到棋盘就去想二分图.(smg啊)(其实是校内模拟赛有基本一样的题,只不过直接给了个二分图) 看到二分图就去想最大匹配.(我怎么想偶环的性质去了) (以下内容摘自这里) 这个二分图 ...
- vscode源码分析【六】服务实例化和单例的实现
第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 第三篇:vscode源码分析[三]程序的启动逻辑,性能问题的追踪 ...
- flask--数据库迁移之连环踩坑记
flask数据库迁移命令: python manage.py db init python manage.py db migrate python manage.py db upgrade 1.报错: ...