第七章 菜单

菜单是odoo种最常见的组件之一,其基本的作用就是作为前端和动作(action)的纽带。菜单的定义,我们在第一部分已经接触到,并且写了很多的示例,相信读者已经熟练的学会了定义一个菜单并绑定相应的动作。

本章,我们将着重认识菜单的本质是什么,以及它所拥有的哪些高级属性,以及它的高级应用。

菜单的本质

菜单实际上就是odoo中的一个对象,被命名为ir.ui.menu。

菜单对象所拥有的常见属性有如下几个:

  • name : 菜单的名字
  • complete_name: 完整的路径,这个是由系统自动得出的
  • parent_id: 上级菜单的id
  • action: 绑定的动作
  • web_icon: 菜单的图标
  • sequence: 序号(优先级)
  • web_icon_data: 上传的图标文件
  • child_id: 子菜单集
  • group_ids: 权限组

我们在xml文件中常用的标签:

<menuitem id=".." parent=".." .../>

实际就是正常record的简写。完整的菜单可以写成如下的模式:

<record id="..." model="ir.ui.menu">
    <field name="name"></field>
    <field name="parent_id"></field>
    <field name="action" ref=""/>
    <field name="web_icon"></field>
    ...
</record>

菜单的重写与继承

我们知道,在odoo中的model和qweb中的widget都是可以继承和重写的,实际上,对于xml,也是可以重写和继承的。比如说,我们希望对odoo原有菜单进行修改或者移动原有菜单所在的位置,那么该如何去做呢?

对菜单的修改,不可以使用简写的模式

实际上,菜单的继承和重写非常简单,只需要把xml定义中的id跟要重写的菜单保持一致就可以了,也就是通过覆盖,把对应的属性改成新的值。

例如,我们希望把采购-采购菜单下面的产品菜单单独拿出来作为一个新的菜单“基础数据”的子菜单,那么我们就可以这么写:

<record id="purchase.product_product_menu" model="ir.ui.menu">
    <field name="parent_id" ref="menu_purchase_main_data"/>
    <field name="name">Products</field>
</record>

menu_purchase_main_data是我自己新定义的一个菜单,这样就完成了对原有菜单的父菜单的重写,界面上的变化,就是我们把“产品”菜单移走了。

特殊的菜单

odoo中有一类菜单,是只有在开发者模式下才可以被看到,这个菜单就是其他设置/技术特性(base.group_no_one)。 如果仅仅是将用户添加到这个组中,指定了技术特性的菜单是无法在正常模式下被看到的,只有将菜单绑定其他可见的用户组,才可以被这个用户组的用户在普通模式下可见。

results matching ""

    No results matching ""