网站首页 > 文章精选 正文
Odoo 用户菜单架构解析及创建和管理实战
Odoo 中的用户菜单提供了一个简洁的界面,用户可以通过一个下拉菜单轻松访问关键功能、我的设置、寻求支持以及进行入职引导等操作。
本文将深入解析Odoo 18用户菜单系统的技术架构,通过实战案例演示如何为系统管理员添加开发者模式快捷入口。要实现这一点,我们可以向 user_menuitems 注册器中添加新的项目。
注册器就像是一个有序的键值对集合,是扩展 Odoo Web 客户端的主要方式。当 JavaScript 框架需要检索字段、视图、操作或服务等的定义时,只需在注册器中查找即可。
该功能的实现涉及JavaScript框架核心机制,是理解Odoo Web客户端扩展机制的最佳切入点。
一、用户菜单系统架构解析
1、注册器的类别:
·效果注册器:管理所有可用的视觉和行为效果。
·格式化器注册器:包含用于格式化值的实用函数,主要用于字段。
·解析器注册器:存放负责解释或解析值的函数。
·主组件注册器:用于在 Web 客户端中注册高级组件。
·服务注册器:列出系统中需要激活的服务。
·系统托盘注册器:控制导航栏右侧显示的内容。
·用户菜单注册器:处理位于导航栏右上角的用户菜单中显示的项目。
二、开发者模式快捷入口开发实战
1、JavaScript模块创建
/** @odoo-module **/
import { registry } from "@web/core/registry";
import { browser } from "@web/core/browser/browser";
import { _t } from "@web/core/l10n/translation";
function debugItem(env) {
const urlParams = new URLSearchParams(window.location.search);
urlParams.set('debug', '1');
const debugURL = window.location.pathname + '?' + urlParams.toString();
return {
id: "debug",
type: "item",
description: _t("开发者模式"), // 多语言支持
href: debugURL,
callback: () => {
browser.open(debugURL, "_self"); // 页面重定向
},
sequence: 60, // 菜单项排序权重
};}
// 注册到用户菜单系统
registry.category("user_menuitems").add("debug", debugItem);
- 关键参数说明
·description:菜单项显示的文本。
·href:(可选)如果提供且有效,文本将放置在带有指定 href 链接的锚点(<a>)标签内。
·sequence:(可选)指定该菜单项相对于下拉菜单中其他项目的顺序,数值越小排序越靠前(默认100)。
·hide:(可选)指定该菜单项是否应隐藏(默认值为 false)
·callback:选择该菜单项时执行的函数,支持异步操作(需返回Promise对象)
- 模块集成与部署
1、资源文件配置(manifest.py)
{
'name': '开发者模式扩展',
'version': '18.0.1.0',
'assets': {
'web.assets_backend': [
'your_module/static/src/js/user_menu.js',
]
}}
我的模块名称为test_module,js文件名为menuitem.js资源文件配置:
{
'name': '开发者模式扩展',
'version': '18.0.1.0',
'assets': {
'web.assets_backend': [
'test_module/static/src/js/menuitem.js',
]
}}
当安装该模块后,“开发者模式” 选项会出现在导航栏右上角的用户菜单中。点击该选项即可启用调试模式。
用户菜单通过在界面右上角提供对重要的用户特定操作的便捷访问,简化了导航并提高了效率。
猜你喜欢
- 2025-05-08 100%开源免费的低代码/可视化数据分析、数据展示平台
- 2025-05-08 Spring Boot跨域问题终极解决方案:3种方法根治CORS报错
- 2025-05-08 永久免费内网穿透很简单,一看就明白
- 2025-05-08 关于编码的那些事 - URL 编码(编码url是什么意思)
- 2025-05-08 20 个让人惊叹的 JavaScript 单行代码技巧,效率瞬间提升
- 2025-05-08 如何使用java.net.URLConnection发起和处理HTTP请求
- 2025-05-08 崩溃!代码总掉链子?6 个 JavaScript 技巧助你稳操胜券
- 2025-05-08 抓狂!代码总出错?5 个 JavaScript 技巧助你逆风翻盘
- 2025-05-08 前端性能拉胯?这 8 个 JavaScript 技巧让你的代码飞起来!
- 2025-05-08 崩溃!页面卡顿总翻车?6 个 JavaScript 技巧教你逆风翻盘
- 最近发表
-
- 100%开源免费的低代码/可视化数据分析、数据展示平台
- Spring Boot跨域问题终极解决方案:3种方法根治CORS报错
- 永久免费内网穿透很简单,一看就明白
- Odoo 用户菜单架构解析及创建和管理实战
- 关于编码的那些事 - URL 编码(编码url是什么意思)
- 20 个让人惊叹的 JavaScript 单行代码技巧,效率瞬间提升
- 如何使用java.net.URLConnection发起和处理HTTP请求
- 崩溃!代码总掉链子?6 个 JavaScript 技巧助你稳操胜券
- 抓狂!代码总出错?5 个 JavaScript 技巧助你逆风翻盘
- 前端性能拉胯?这 8 个 JavaScript 技巧让你的代码飞起来!
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)