Odoo 16 如何为门户下拉框添加带跳转的菜单项?
解决方案提示
1. 定位正确的模板文件
你找的portal_templates.xml并非目标文件,门户右上角用户下拉菜单的核心定义在portal/views/portal_layout.xml中,其中名为portal_user_menu的QWeb模板片段负责渲染该下拉菜单。
2. 通过自定义模块扩展模板(核心步骤)
禁止直接修改Odoo核心模块文件,需创建自定义模块来扩展模板:
- 在自定义模块内新建
views/portal_custom_menu.xml文件 - 使用Odoo模板继承语法,扩展
portal_user_menu并添加新菜单项:
<odoo> <template id="portal_custom_user_menu" inherit_id="portal.portal_user_menu" name="Custom Portal User Menu"> <xpath expr="//div[@class='dropdown-menu dropdown-menu-right']" position="inside"> <a class="dropdown-item" href="/your-target-page">自定义跳转项</a> </xpath> </template> </odoo>
- 将该XML文件添加到模块
__manifest__.py的data列表中,确保模块加载时能识别。
3. 配置自定义页面路由(若目标页面为自定义页面)
如果跳转的指定页面是你自己开发的,需在自定义模块的controllers/main.py中添加路由:
from odoo import http from odoo.http import request class PortalCustomController(http.Controller): @http.route('/your-target-page', type='http', auth='user', website=True) def load_custom_page(self): # 这里可传递模板所需变量,若无则留空字典 return request.render('your_module_name.custom_page_template', {})
同时创建对应的QWeb模板文件views/custom_page_template.xml,编写页面渲染内容。
4. 测试验证
安装/升级你的自定义模块,刷新门户页面即可看到下拉菜单中新增的跳转项。
关键注意事项
- 始终遵循Odoo的扩展规范,用自定义模块继承替代修改核心文件,避免升级时丢失配置
- 路由中的
auth='user'确保仅登录的门户用户可访问,若需允许未登录访问可改为auth='public' - 跳转路径需与路由定义完全一致
内容的提问来源于stack exchange,提问作者Evgeny
相关产品推荐
相关产品推荐

