Odoo网页开发

Odoo 14与此前的Odoo版本在网页客户端上有些特别之处。它包含了两套框架用于维护Odoo后台的图形界面。第一种是传统的基于微件(小部件)的框架,第二种是基于模块化的现代框架,称之后Odoo网页库(OWL)。OWL是在Odoo v14中新引入的UI框架。两者都使用QWeb模块作为结构,但在语法及框架运行方式上做出了很大的改变。

虽然Odoo 14使用了新框架OWL,但Odoo并没有在处处使用它。大多数网页客户端仍然使用老的基于微件的框架。

静态资源包

当页面在浏览器中加载时,这些静态文件对服务端发送单独的请求。不同页面需要加载的资源有区别,为了尽量减少加载不必要的资源,提升页面加载效率,Odoo区分了以下几个主要的资源包:

web.assets_common:这个资源包包含对所有应用通用的基本工具文件

web.assets_backend:这一资源包在Odoo的后台中使用(ERP部分)。它包含所有与web客户端、视图、字段微件、动作管理器等相关的代码。

web.assets_frontend或website.assets_frontend::这一资源包用于Odoo的前台(网站部分)。

web_editor.assets_editor和web_editor.summernote:这个资源包包含与网站编辑小组件选项及拖拽功能(网站构造器)相关的代码。

web.report_assets_common:QWeb报表仅仅是通过HTML生成的PDF文件。这一资源在报表布局中进行加载。

AssetsBundle

Odoo通过AssetsBundle类管理其静态资源-- /odoo/addons/base/models/assetsbundle.py.  AssetBundle可以合并多个js、css文件, 可以从文件内容中删除注释、多余空格及回车换行来最小化JavaScript和CSS文件;提供SASS和LESS等CSS预处理器的内部支持。

通过AssetsBundle打包过后,调试JavaScript变得困难,通过启用带资源的开发者模式,可以跳过资源打包,页面中会独立加载各个静态资源,这样就可以轻松地进行调试了。
Odoo中资源仅会生成一次。这种行为对于开发阶段来说相当头疼,因为这时会需要进行频繁的服务端重启。要解决这一问题,我们可以在命令行中使用dev=xml,这样会直接加载资源,就无需再重启服务了。

RequireJS机制

为避免JavaScript的排序问题,Odoo使用了类似RequireJS的机制。

网页开发机制

1. 创建控制器,指定路由,同时制定渲染的模板并传参;

2. 定义模板,继承基础页面模板(比如:website.layout),  添加带有一些QWeb模板属性的HTML


Odoo渲染带有website.layout模板的页面并在模板内部插入内容,website.layout包含所有需要的工具,如Bootstrap, jQuery, FontAwesome等等。这些工具用于设计网页。website.layout还包含默认的头部、底部、代码片断和页面编辑功能。




技术
Odoo Debug
找到好工具,问题也就解决了一半