时间:2023-06-14 14:58:17 点击次数:12
就 Odoo 而言,管理静态资产并不是那么简单。众所周知,它具有广泛的应用程序和代码库。Odoo 中的不同应用程序具有特定的用途,并具有不同的用户交互。因此,Odoo 中的资产并不像任何其他应用程序那样简单或简单。例如,Web 客户端、网站、POS 或移动应用程序的需求是不同的。此外,有些项目可能很大但很少需要:在这种情况下,我们可能希望它们被延迟加载(如果需要)。加载大型不需要的静态资产是不健康的,我们可能必须根据需要加载它们。为了避免在 Odoo 中出现这个例子,
现代网站包含数十个 JavaScript 和 CSS 文件。当页面上传到浏览器时,这些静态文件会向服务器发出请求。大量请求会减慢网站速度。许多网站通过组合多个文件来提供静态资产来避免这个问题。有很多工具可以管理这些类型的项目,但 Odoo 有自己的静态资产管理方式。
在 Odoo 中,存在三种不同类型的资产,即脚本(JavaScript 文件)、样式(CSS 或 SCSS 文件)和模板(XML 文件)。
1.脚本(JavaScipt 文件)Odoo 支持三种不同类型的 javascript 文件,每一种都捆绑在一起并提供给浏览器。Odoo 支持的不同类型的 javascript 文件是纯 javascript 文件、本机 javascript 模块和 Odoo 模块。在这个纯 javascript 中,文件仅为外部库和特定形式的低级目的保留。所有新创建的 javascript 文件都应在本机 javascript 模块系统中创建。Odoo 模块是这些 javascript 文件的自定义模块系统,如果它们 不在资产调试模式下,最后连接起来。最后,结果存储为附件。通常,这些附件是使用页面 <head> 标记中的 <script> 标记加载到静态文件中的。2. 样式(CSS 或 SCC 文件)样式可以使用 CSS 或 SCSS 文件来完成。样式文件以与 JavaScript 文件相同的方式处理,然后被缩小和集成。(如果不在 debug=asset 模式下,则为调试模式)。SCSS 文件被转换为 CSS。然后将文件保存为附件并使用 <head> 标记中的 <link> 标记加载。3. 模板(XML文件-Qweb)模板是静态 XML 文件。一旦需要它们并最终连接起来,它们就会以只读方式访问,就像 javascript 和优雅文件一样。每次浏览器加载 Odoo 时,它都会调用 /web/WebClient/qweb/ 控制器来检索模板。QWeb 是 Odoo 使用的第一个模板引擎。它是一个 XML 模板引擎,主要用于处理 HTML 片段和页面。模板指令被定义为 t 的前缀 XML 属性,例如 t-if 用于直接呈现组件和其他属性的条件。需要注意的是,在大多数情况下,浏览器仅在第一次加载页面时才执行请求。这是因为这些资产中的每一个都链接到页面源中包含的清单。然后它将校验和添加到 URL,这意味着缓存标头可以安全地设置更长的时间。
Odoo 资产按捆绑包分组,每个捆绑包都可以是特定类型资产(如 XML、JS、CSS 或 SCSS)的各种文件路径的列表。捆绑包在 Odoo 模块的清单文件中列出。由于这些文件使用全局语法,我们将在一行中声明不同的资产文件。在模块 __manifest__ 文件中添加捆绑包时,会使用包含字典的关键资产。不同字典中重要的是秘密包的名称和值以及包含它们的文件列表。它看起来像这样:
assets: { web.assets_common: [ web/static/lib/bootstrap/**/*, web/static/src/js/boot.js, web/static/src/js/webclient.js, ], web.assets_backend: [ web/static/src/xml/**/*, ], web.assets_frontend: [ web/static/src/scss/style.scss, web/static/src/js/custom.js, ], web.assets_qweb: [ web/static/src/xml/templates.xml, ], web.qunit_suite_tests: [ web/static/src/js/webclient_tests.js, ], web.qunit_mobile_suite_tests: [ web/static/tests/mock_tests.js, ], },1.web.assets_common
此捆绑包包含 Web 客户端、网站和销售点中的大多数常见资产。它包括一个 boot.js 文件,该文件描述了 odoo 模块系统。此外,这可以是包含对 Odoo 框架有用的低级构建块的包。
2.web.assets_backend
这是包含特定于操作管理器/Web 客户端或视图的代码的包,即基本上用于 Web 客户端
3.web.assets_frontend
这是一个公共网站,如电子商务、门户、论坛、博客等
4. web.assets_qweb
所有静态 XML 模板都用于后端环境和销售点。
5. web.qunit_suite_tests
用于测试、帮助程序和模拟的所有 javascript qunit 测试代码。
6. web.qunit_mobile_suite_tests
捆绑特定于移动设备的 qunit 测试代码
通常,使用 assets_common 或 assets_backend 管理资产非常容易。但其他操作可用于涵盖某些特殊用例。它们如下所示:
appendappend 操作用于将一个或多个文件添加到包的末尾。这是最常用的操作,您可以使用文件名来执行此操作web.assets_common: [ module_name/static/src/js/file_name.js, ],prependprepend 操作用于在包的开头添加一个或多个文件。在捆绑包中的其他文件之前添加特定文件时很有用。可以使用以下语法来完成:(prepend, <path>)。例如,web.assets_common: [ (prepend, module_name/static/src/css/file_name.scss), ],beforebefore 操作用于在特定文件之前添加一个或多个文件。在包的开头创建文件可能不够准确。它可用于在目标文件之前添加给定文件。可以使用以下语法来完成:(before, <target>, <path>)。例如,web.assets_common: [ (before, web/static/src/css/bootstrap_overridden.scss, module_name/static/src/css/file_name.scss), ],afterafter 在特定文件之后添加一个或多个文件。和以前一样,但它在目标文件之后加起来。它由以下语法声明:(after, <target>, <path>)。例如,web.assets_common: [ (after, web/static/src/css/list_view.scss, module_name/static/src/css/file_name.scss), ],include使用嵌套包。include 指令可能是感谢使用其他捆绑包中的捆绑包来减小清单的尺寸。语法:(include,<bundle>)。例如,web.assets_common: [ (include, web._primary_variables), ],remove在某些情况下,您可能希望从捆绑包中删除一个或多个文件。这可以使用删除操作来完成。语法:(remove, <target>)例如,web.assets_common: [ (remove, web/static/src/js/boot.js), ],replace您要删除资产,但还要在同一位置添加该资产的新版本。这可以使用替换指令来完成。语法:(replace, <target>, <path>)例如,web.assets_common: [ (replace, web/static/src/js/boot.js, module_name/static/src/js/boot.js), ],