【问题标题】:Adding icons to menu items in odoo在odoo中向菜单项添加图标
【发布时间】:2015-05-04 13:30:33
【问题描述】:

我尝试将一个图标设置为menuitem,所以我发现属性图标是支持的,但是当我改变它的值时没有变化。

我想知道 odoo v7/8 中的 menuitem 是否仍然支持它。如果没有,如何给菜单项添加图标?

编辑:

我尝试在 odoo 中自定义菜单视图。所以我覆盖了从 web 模块中呈现“webClient_templates.xml”中菜单的模板,如下所示:

<template id="my_menu_link" inherit_id="web.menu_link">
  <span position="replace">
     <span class="oe_menu_text">
        <i class="fa fa-check"></i>
        <t t-esc="menu['name']"/>
     </span>
  </span>
</template>

很可能,所有菜单项都将具有来自 font-awesome lib 的相同图标(即 fa-check)。 现在,我尝试为每个菜单项添加一个特定的图标,我可以在 menuitem 的 xml 描述中以某种方式将它定义为一种属性或其他任何东西,然后像这样检索它:

<i t-attrs-class="menu['icon']"></i>

我尝试使用 menuitem 的 icon 属性,即使它已被弃用,但 menu['icon'] 在模板级别无法识别。

有什么建议吗?

【问题讨论】:

  • 您实际上做了什么来解决您的问题?你读过文档吗?
  • 其实我是从web模块扩展webclientTemplate中的“web.menu”和“web.menu_secondary”模板,自定义菜单元素的显示。
  • 不知道这个问题是不是还没有答案,但是我现在在用odoo-12,图标字段还在ir.ui.menu模型上,但是准确的名字是" web_icon",那么您是否尝试进入开发人员模式以查看字段名称?也许&lt;i t-attrs-class="menu['web_icon']"&gt;&lt;/i&gt; 有效...(我没试过)

标签: odoo odoo-8


【解决方案1】:

AFAIK 在菜单项中显示图标已被弃用,并且在 Web 客户端上不起作用。可能要实现这一目标,您需要为 Web 客户端创建一个模块,并使用该功能对其进行扩展。

【讨论】:

  • 这正是我所做的。实际上,我从 web 模块扩展了 webclientTemplate 中的“web.menu”和“web.menu_secondary”模板,并自定义了菜单元素的显示。但是,我被阻止如何从 xml 文件中动态获取附加信息。我的意思是,如果我想从 menuitem 的 xml 声明中获取图标的信息,则不接受任何附加属性(如类...),因此即使我覆盖显示,我也无法从 xml 定义我的图标。请问在这种情况下有什么想法吗?
  • 你应该写一个问题来解释你尝试了什么以及你被阻止的确切位置......
【解决方案2】:

我现在用的是odoo v12,ir.ui.menu模型上还有一个未使用的图标字段。

我设法在后端菜单上显示图标,这里是您的代码的不同之处:

  • 图标字段名为web_icon,可能是v10+特有的,我没有v8来验证。
  • 设置属性的模板语法是t-att-&lt;name&gt; 而不是t-attrs-&lt;name&gt;
  • 最重要的是:后台的菜单是用javascript生成的,所以要修改的模板在web/static/src/xml/menu.xml
  • 有 3 个地方可以在 2 个模板中添加 &lt;i&gt; 标记:
    • &lt;t t-name="Menu.link"&gt;
      • 第 47 行:&lt;span&gt;&lt;i t-att-class="menu.web_icon"&gt;&lt;/i&gt; &lt;t t-esc="menu.name"/&gt;&lt;/span&gt;
      • 第 59 行:&lt;span&gt;&lt;i t-att-class="menu.web_icon"&gt;&lt;/i&gt; &lt;t t-esc="menu.name"/&gt;&lt;/span&gt;
    • &lt;t t-name="Menu.sections"&gt;
      • 第 81 行:&lt;i t-att-class="second_level_menu.web_icon"&gt;&lt;/i&gt; &lt;t t-esc="second_level_menu.name"/&gt;

要在菜单图标字段中设置的数据是整个字体很棒的 CSS 类:
fa fa-check

如果您添加更多图标集,这很好,您无需再次修改模板。 但是如果你想强制使用 font-awesome,或者想使用另一个图标集,比如 font-awesome solid(使用fas 类),你可以在模板中使用这个标记:

&lt;i t-attf-class="fas fa-#{menu.web_icon}"&gt;&lt;/i&gt;
(注意t-attf-&lt;name&gt;使用“属性函数”)

所以字段中的数据将只有check...

最后,最好的办法是创建一个模块来继承模板并进行此修改,而不是像我一样直接修改它...
并且还添加了一些 CSS 样式来正确对齐图标和文本(这里的图标大小不一样)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 2019-09-27
    • 2022-06-22
    • 2017-09-13
    相关资源
    最近更新 更多