如何通过代码为Odoo 12网站创建「ABOUT US」主菜单的子菜单?
解决Odoo菜单重复创建问题:给已有主菜单添加子菜单
看起来你遇到的问题是代码重复创建了「ABOUT US」主菜单,而不是把「BOARD AND FOUNDERS」挂到已有的主菜单下面。我帮你分析下原因和解决方案:
问题根源
你的代码里同时定义了「ABOUT US」主菜单和它的子菜单。如果系统里已经存在一个「ABOUT US」主菜单,这段代码会因为你新增了一个ID为menu_about_us的菜单记录,导致出现两个同名的主菜单;如果是第一次创建,那逻辑是对的,但可能是ID冲突或者页面引用的问题导致显示异常。
分情况解决
情况1:系统里已经有「ABOUT US」主菜单
你只需要保留子菜单的代码,并且修改parent_id的引用,指向已存在的「ABOUT US」菜单的XML ID,而不是你自己定义的menu_about_us。
修正后的子菜单代码:
<!-- 给已有的ABOUT US主菜单添加子菜单 --> <record id="menu_board_and_founders" model="website.menu"> <field name="name">BOARD AND FOUNDERS</field> <field name="page_id" ref="board-and-founders" /> <!-- 替换成你系统中已存在的ABOUT US菜单的XML ID --> <field name="parent_id" ref="existing_about_us_menu_id" /> <field name="sequence" type="int">10</field> </record>
提示:可以在Odoo的「网站设置」→「菜单」里找到已有的ABOUT US菜单,查看它的外部ID(XML ID)
情况2:需要新建「ABOUT US」主菜单和子菜单
如果系统里还没有这个主菜单,那你的代码逻辑是对的,但要确保菜单的XML ID是唯一的(避免和其他模块冲突),建议给ID加上你的模块前缀,比如your_module_name.menu_about_us:
<!-- 新建ABOUT US主菜单(带模块前缀确保ID唯一) --> <record id="your_module.menu_about_us" model="website.menu"> <field name="name">ABOUT US</field> <field name="page_id" ref="your_module.about-us" /> <field name="parent_id" ref="website.main_menu" /> <field name="sequence" type="int">10</field> </record> <!-- 新建子菜单挂到上面的主菜单下 --> <record id="your_module.menu_board_and_founders" model="website.menu"> <field name="name">BOARD AND FOUNDERS</field> <field name="page_id" ref="your_module.board-and-founders" /> <field name="parent_id" ref="your_module.menu_about_us" /> <field name="sequence" type="int">10</field> </record>
额外检查项
- 确认
page_id引用的页面(about-us和board-and-founders)已经在你的模块中正确定义,没有拼写错误 - 修改代码后,记得升级你的模块,然后刷新网站页面(必要时清除浏览器缓存)
- 避免使用通用的XML ID(比如直接用
menu_about_us),加上模块前缀可以减少冲突概率
内容的提问来源于stack exchange,提问作者Ganesh Waghmare
相关产品推荐
相关产品推荐

