odoo菜单定义和修改学习总结

环境

odoo-14.0.post20221212.tar

定义菜单

方式1:

<?xml version="1.0"?>
<odoo>
<menuitem id="root_menu_id" name="TopMenu" web_icon="estate,static/img/icon.png">
<menuitem id="second_level_menu" name="SecondLevelMenu">
<menuitem id="third_level_menu1" action="third_level_menu1_action" sequence ="10"/>
<menuitem id="third_level_menu2" action="third_level_menu2_action" sequence ="20"/>
</menuitem>
</menuitem>
</odoo>

说明:

  • id 菜单外部ID

  • name

    如果不指定name,则:

    • 如果为菜单设置了action,则获取action record定义中name字段的值作为菜单name属性的值
    • 如果未设置菜单action,则获取菜单外部ID为值作为菜单name属性的值
  • action

    打开菜单时需要执行的action的外部ID

  • web_icon

    指定菜单图标,格式:模块名称,图标路径,形如estate,static/img/icon.png 意为estate模块下的static/img/icon.png图标。其中图标路径,一般是相对于模块根目录的相对路径

  • sequence

    设置菜单展示顺序。该属性值越大,越靠右、靠下方展示。也就是说,菜单从左往右,从上到下,对应sequence属性值从小到大。

  • <menuitem>元素也可以放在<data>元素中,形如

    <?xml version="1.0"?>
    <odoo>
    <data>
    <menuitem id="root_menu_id" name="TopMenu" web_icon="estate,static/img/icon.png">
    ...
    </menuitem>
    </data>
    </odoo>
  • groups

    逗号分隔的res.groups模型的外部ID序列,形如groups="group_account_user,group_account_manager,group_account_invoice",表示菜单只能被group_account_user,group_account_manager,group_account_invoice 三个用户组访问。用于指定可以访问菜单的用户组。如果外部ID以-为前缀,则从菜单组中移除该ID代表的组,注意,如果指定用户组不是在当前模块中定义的,需要指定所在模块名称,形如estate.group_estate_property_root_menu

    示例:

    <?xml version="1.0"?>
    <odoo>
    <data>
    <menuitem id="root_menu_id" name="TopMenu" web_icon="estate,static/img/icon.png" groups="group_estate_property_root_menu">
    ...
    </menuitem>
    </data>
    </odoo>

方式2:通过parent来设置菜单层级

<?xml version="1.0"?>
<odoo>
<menuitem id="root_menu_id" name="TopMenu" web_icon="estate,static/img/icon.png"/>
<menuitem id="second_level_menu" name="SecondLevelMenu" parent="root_menu_id"/>
<menuitem id="third_level_menu1" action="third_level_menu1_action" sequence ="10" parent="second_level_menu"/>
<menuitem id="third_level_menu2" action="third_level_menu2_action" sequence ="20" parent="second_level_menu"/>
</odoo>

说明:

  • parent

指定父级菜单外部ID,如果上级菜单不在当前模块中,则需要指定上级菜单所在模块,形如parent="moduleName.parent_menu_id"

修改菜单

本节要介绍的是一种特殊的修改方式,并不是直接修改原有菜单定义。这种修改方式之所以特殊,是因为它不修改原有菜单的定义,而是通过重新定义菜单来修改,可以简单的类比为“继承”,具体做法如下:

  1. 定义一个新的菜单<menuitem>,将其id属性值设置为原有菜单所在模块名称及其id属性值的组合,形如:moduleName.source_menu_id(参见下述示例),如果新的菜单和原有菜单在同一个模块,可以省略moduleName.

  2. 修改相关菜单属性值为目标值(如果需要的话)

    示例:重新定义purchase.menu_purchase_root菜单名称

    <menuitem id="purchase.menu_purchase_root" name="omsPurchase"/>
  3. 以新定义的菜单为父级菜单,添加子菜单(如果需要的话),添加方式可以参考上文所述,需要注意的是,不管采用哪种方式,原有菜单的子菜单依然存在,并显示为新定义菜单的子菜单

  4. 隐藏原有菜单的子菜单(如果需要的话)

    定义一个<record>,将其id设置为要隐藏的子菜单所在模块名称及id属性值的组合,形如:moduleName.source_menu_id,如果新的菜单和原有菜单在同一个模块,可以省略moduleName.

    将其model设置为"ir.ui.menu"

    添加子元素 <field name="active" eval="False"></field>,其中eval=False则表示隐藏,eval=True表示显示

    <?xml version="1.0"?>
    <odoo>
    ...
    <record id="purchase.sub_menu_purchase" model="ir.ui.menu">
    <field name="active" eval="False"></field>
    </record>
    </odoo>

参考连接

https://www.odoo.com/documentation/14.0/zh_CN/developer/reference/addons/data.html#shortcuts

Odoo 菜单定义和修改学习总结的更多相关文章

  1. Firemonkey TComboBox 下拉菜单字型修改方法 (D10)

    在 FMX 下的 TComboBox 下拉菜单字型修改有二种方法: uses FMX.Pickers; 使用 Style,需先设定好 Style 后,再指定预设项的 Style,方法如下: proce ...

  2. 以流方式读写文件:文件菜单打开一个文件,文件内容显示在RichTexBox中,执行复制、剪切、粘贴后,通过文件菜单可以保存修改后的文件。

    MainWindow.xaml文件 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&q ...

  3. Odoo 菜单美化的扩展模块

    详见: http://www.oejia.net/blog/2018/07/07/oejia_menu_about.html Odoo 菜单美化主题,odoo默认的菜单算是简洁好用的,如果您觉得还少了 ...

  4. oracle 11g 通过在线重定义方式修改表结构

    今天因为要对一套数据库的数据抽取进行io优化,希望通过修改表结构将抽取io降下来,因为抽取只针对标签HAVE_FLAG为"0"的值进行抽取,抽取之后更新HAVE_FLAG为其他值, ...

  5. mysql视图和存储过程定义者修改脚本(懒人专用)

    前言: 在实际工作中mysql数据库的迁移.备份恢复.数据库重命名等一系列涉及到视图和存储过程定义者问题都会需要修改,每次都要从基础表获取数据,然后手工整理做脚本,十分麻烦,所以简单写了个过程,以后可 ...

  6. vue全局变量定义和修改

    1. 只读的全局变量 对于只读的全局变量,知道的有以下两种使用方式: 1)global.js 模块中定义:其他模块import后再使用即可 1.1)定义 import Vue from 'vue'; ...

  7. 数据库SQL---数据库、基本表、视图、索引的定义、修改、删除

    1.SQL(结构化查询语言)的组成:数据定义语言DDL.数据操纵语言DML.数据控制语言DCL.其他. 2.SQL语言的功能: 1)数据查询:SELECT 2)数据定义:CREATE   DROP  ...

  8. Oracle 关于定义约束 / 修改表结构 /修改约束

    ---约束分5种:主键 外键 唯一 非空 检查5类约束 Oracle中分列级别约束 与 表级别约束 列级别约束:在创建表时再列上面加约束 例如: create table table11( stuno ...

  9. Android 定义自己的学习(5)它们的定义Progressbar

    它们的定义View最后的研究,首先在效果图. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDE2MzcyNg==/font/5a6L5L2T/f ...

  10. flash 右键菜单隐藏与修改

    来源:http://blog.sina.com.cn/s/blog_7264c84401014fmd.html import flash.ui.ContextMenu;import flash.ui. ...

随机推荐

  1. go goroutine pool设计

    推荐一遍由浅入深简绍goroutine pool设计的方案.https://strikefreedom.top/high-performance-implementation-of-goroutine ...

  2. exe应用程序安装为windows服务

    1.使用instsrv.exe和srvany.exe 当你获取到srvany后并决定将某程序作为服务启动后,请先将srvany安装为系统服务,具体的安装方法有很多,这里使用instsrv,语法如下:安 ...

  3. web游览器的标签页仿 ios mac 苹果的墓碑机制 (js代码)

    背景: 本来项目开发系统防挂机功能,在其余游览器中均可以使用.但是呢在苹果的safair游览器中会出现几率失效,最后经过排查发现是苹果的墓碑机制导致.即:此标签页活跃,其他标签页假死.然后就导致防挂机 ...

  4. windows 命令行调整分辨率

    windows 命令行调整分辨率 下载:qres_v1.1 https://abcker.lanzouq.com/i1uzA1a5uo8j 解压出来,如:D:\Soft\QRes,不要使用中文名目录. ...

  5. 已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除 NoSync 订阅,然后重

    已将此(这些)订阅标记为不活动,必须将其重新初始化.需要删除 NoSync 订阅,然后重 查找状态不正常的发布 use distribution go select status,*from dbo. ...

  6. 【大道至简】NetCore3.1快速开发框架一:介绍

    新的一年开始,祝大家2020新年快乐! 去年开源了一个基于NetCore2.2的框架,好多好基友还是比较喜欢的 github地址:https://github.com/feiyit/FytSoaCms ...

  7. 在线HMAC加密工具

    在线HMAC加密工具提供一站式服务,支持MD5至SHA512.RIPEMD160及SM3等多种哈希算法,用户可便捷选择算法并生成安全的HMAC散列值,确保消息完整性与验证来源.适用于开发调试.网络安全 ...

  8. -bash: curl: command not found 卸载后重新安装

    -bash: curl: command not found rpm -e --nodeps curl yum remove curl rpm -qa|grep curl yum -y install ...

  9. Nuxt.js 深入浅出:目录结构与文件组织详解

    title: Nuxt.js 深入浅出:目录结构与文件组织详解 date: 2024/6/18 updated: 2024/6/18 author: cmdragon excerpt: 摘要:本文详述 ...

  10. Linux驱动中的等待队列与休眠

    Linux驱动中的等待队列与休眠 原文:https://blog.csdn.net/mengluoxixiang/article/details/46239523?spm=1001.2014.3001 ...