Odoo:如何继承菜单项(使菜单项不可见)

时间:2015-08-12 11:47:29

标签: xml inheritance xpath odoo

我需要删除(或隐藏)菜单项。 我想这应该用继承和xpath来完成。

但我不确定应该使用哪个名称,型号和inherit_id。我在哪里可以找到正确的值?

我也不知道如何正确使用xpath。 据我所知,只有页面,组和字段的表达式? (http://www.odoo.yenthevg.com/xpath-expressions-in-odoo-8/

必须删除的菜单是产品变体: enter image description here

在addons / product / product_view.xml中,我找到了可能与它有关的东西。

第1行:

<menuitem id="base.menu_product" name="Product Variants" parent="base.menu_base_partner" sequence="9"/>

第444-446行:

<menuitem action="variants_action"
            id="menu_variants_action"
            parent="product.prod_config_main" sequence="10" />

我尝试在我自己的views.xml中使菜单项不可见的方式:

    <record model="ir.ui.view" id="menuproductvariants_inherit">
    <field name="name">name">product.prod_config_main</field>
    <field name="model">base.menu_product</field>
    <field name="inherit_id" ref="product.product_template_only_form_view" />
    <field name="arch" type="xml">
        <xpath expr="//menuitem[@string='Product Variants']" position='replace'>
        <menuitem name=""/>         
    </xpath>            
    </field>
</record>

它给出的错误:

ParseError: "ValidateError
Field(s) `arch` failed against a constraint: Invalid view definition

Error details:
Element '<xpath expr="//menuitem[@string='Product Variants']">' cannot be located in parent view

Error context:
View `name">product.prod_config_main`
[view_id: 971, xml_id: n/a, model: base.menu_product, parent_id: 257]" while parsing /root/git/odoo/modulesdewieuw/dewieuw/views.xml:59, near
<record model="ir.ui.view" id="menuproductvariants_inherit">
        <field name="name">name"&gt;product.prod_config_main</field>
        <field name="model">base.menu_product</field>
        <field name="inherit_id" ref="product.product_template_only_form_view"/>
        <field name="arch" type="xml">
            <xpath expr="//menuitem[@string='Product Variants']" position="replace">
            <menuitem name=""/>         
        </xpath>            
        </field>
    </record>

修改:在制作新论坛的提示后,我尝试了一下。 我创建了一个组“verborgenmenus”并添加了一个用户。

在我的xml中,我把它放在某个地方:

<menuitem id="base.menu_product" name="Product Variants" parent="base.menu_base_partner" sequence="9" groups="verborgenmenus"/>

它给了我以下错误:

    raise ValueError('External ID not found in the system: %s' % (xmlid))
ParseError: "External ID not found in the system: dewieuw.verborgenmenus" while parsing /root/git/odoo/modulesdewieuw/dewieuw/views.xml:34, near
<menuitem id="base.menu_product" name="Product Variants" parent="base.menu_base_partner" sequence="9" groups="verborgenmenus"/>

我的代码有什么问题?

编辑:只需从用户/技术功能组中移除用户,我就能获得所需。

7 个答案:

答案 0 :(得分:1)

您无法在Odoo中隐藏菜单项,就好像它是一个字段一样。您必须使用<delete id="your_module.tour_xml_id" model="ir.ui.menu"/> 标记将其删除:

groups

在不删除属性的情况下使其不可见的一种方法是将属性<menuitem id="your_module.tour_xml_id" groups="empty_group"/> 添加到menuitem,并在其中放置一个组,其组件只是可以查看menuitem的用户。如果您不希望任何用户看到它,请创建一个空组并为其分配该属性:

{{1}}

答案 1 :(得分:1)

<record id="make_invisible" model="res.groups">
    <field name="name">Invisible</field>
</record>
<record model="ir.ui.menu" id="base.menu_product">
    <field name="groups_id" eval="[(6,0,[ref('make_invisible')])]"/>
</record>

答案 2 :(得分:0)

您可以将其删除:

<delete model="ir.ui.menu" id="module_name.menuitem_id"/>

但它不值得推荐,因为可能其他一些模块试图访问它。您可以将其添加到管理组中,以使其对其他用户不可见:

<menuitem id="module_name.menuitem_id" parent="module_name.parent_id" sequence="1" groups="base.group_no_one"/>

<强>更新

在您的情况下,menuitem的ID应为id="product.menu_products"

答案 3 :(得分:0)

<record id="hide" model="res.groups">
    <field name="name">Hide</field>
    <field name="comment">Hide.</field>
</record>

<menuitem id="product.menu_products" name="Product Variants" parent="base.menu_product" sequence="10" groups="hide"/>

您还需要从此菜单中删除“可用性/技术功能”..

对于Goto:设置 - &gt;用户界面 - &gt;菜单项。 搜索:产品变体 打开表单视图:从组网格中删除“可用性/技术特性”。

答案 4 :(得分:0)

实际上,给定一个menuitem,这是使用“隐藏”组隐藏菜单项的正确方法

    <record model="res.groups" id="group_invisible">
        <field name="name">Hidden items</field>
    </record>


    <record id="module_id.menu_id" model="ir.ui.menu">
        <field name="groups_id" eval="[(6, False, [ref('module_id.group_invisible')])]"/>
    </record>

这对我来说很好。 当然,您也可以使用它来重新定义其属性(父级,名称等等)

答案 5 :(得分:0)

BBBagdiya的答案是正确的,我只需添加name属性,因为它有一个非null约束。

代码是:

$ git status
On branch ATD-86
Untracked files:
(use "git add <file>..." to include in what will be committed)
../javaproject/ 
nothing added to commit but untracked files present (use "git add" to 
track)

答案 6 :(得分:0)

您可以通过以下方式隐藏菜单

safe_exit: