将图标添加到odoo中的菜单项
Adding icons to menu items in odoo
我尝试给menuitem设置一个图标,结果发现支持属性icon,但是改值后没有变化。
我想知道odoo中的menuitem是否还支持它v7/8。如果没有,如何给菜单项添加图标?
编辑:
我尝试在 odoo 中自定义菜单的视图。所以我重写了在 "webClient_templates.xml" 中从 web 模块呈现菜单的模板,如下所示:
<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 库的相同图标(即 fa-check)。
现在,我尝试为每个菜单项添加一个特定的图标,我可以在菜单项的 xml 描述中以某种方式将其定义为一种属性或其他任何东西,并像这样检索它:
<i t-attrs-class="menu['icon']"></i>
我尝试使用 menuitem 的 icon 属性,即使它已被弃用,但菜单 ['icon'] 在模板级别无法识别。
有什么建议吗?
AFAIK 在菜单项中显示图标已被弃用,并且在网络客户端上不起作用。可能要实现这一点,您需要为 Web 客户端创建一个模块以扩展它的功能。
我现在使用的是odoo v12,ir.ui.menu型号上还有一个未使用的图标字段。
我设法在后端菜单上显示图标,这是与您的代码的不同之处:
- 图标字段名为
web_icon
,可能是v10+特有的,我没有v8可以验证。
- 设置属性的模板语法是
t-att-<name>
而不是t-attrs-<name>
- 最重要的是:后台的菜单是使用javascript生成的,所以要修改的模板在
web/static/src/xml/menu.xml
中找到
- 在 2 个模板中有 3 个地方可以添加
<i>
标记:
<t t-name="Menu.link">
- 第 47 行:
<span><i t-att-class="menu.web_icon"></i> <t t-esc="menu.name"/></span>
- 第 59 行:
<span><i t-att-class="menu.web_icon"></i> <t t-esc="menu.name"/></span>
<t t-name="Menu.sections">
- 第 81 行:
<i t-att-class="second_level_menu.web_icon"></i> <t t-esc="second_level_menu.name"/>
要在菜单的图标字段中设置的数据是整个字体真棒 CSS classes:
fa fa-check
如果你添加更多的图标集就好了,你不需要再次修改模板。
但是如果你想强制使用 font-awesome,或者想使用另一个图标集,比如 font-awesome solid(使用 fas
class),你可以在模板中使用这个标记:
<i t-attf-class="fas fa-#{menu.web_icon}"></i>
(注意t-attf-<name>
使用"attribute function")
因此该字段中的数据将仅为 check
...
最后,最好的应该是创建一个模块来继承模板并进行此修改,而不是像我那样直接修改它...
并添加更多 CSS 样式以正确对齐图标和文本(此处图标大小不同)。
我尝试给menuitem设置一个图标,结果发现支持属性icon,但是改值后没有变化。
我想知道odoo中的menuitem是否还支持它v7/8。如果没有,如何给菜单项添加图标?
编辑:
我尝试在 odoo 中自定义菜单的视图。所以我重写了在 "webClient_templates.xml" 中从 web 模块呈现菜单的模板,如下所示:
<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 库的相同图标(即 fa-check)。 现在,我尝试为每个菜单项添加一个特定的图标,我可以在菜单项的 xml 描述中以某种方式将其定义为一种属性或其他任何东西,并像这样检索它:
<i t-attrs-class="menu['icon']"></i>
我尝试使用 menuitem 的 icon 属性,即使它已被弃用,但菜单 ['icon'] 在模板级别无法识别。
有什么建议吗?
AFAIK 在菜单项中显示图标已被弃用,并且在网络客户端上不起作用。可能要实现这一点,您需要为 Web 客户端创建一个模块以扩展它的功能。
我现在使用的是odoo v12,ir.ui.menu型号上还有一个未使用的图标字段。
我设法在后端菜单上显示图标,这是与您的代码的不同之处:
- 图标字段名为
web_icon
,可能是v10+特有的,我没有v8可以验证。 - 设置属性的模板语法是
t-att-<name>
而不是t-attrs-<name>
- 最重要的是:后台的菜单是使用javascript生成的,所以要修改的模板在
web/static/src/xml/menu.xml
中找到
- 在 2 个模板中有 3 个地方可以添加
<i>
标记:<t t-name="Menu.link">
- 第 47 行:
<span><i t-att-class="menu.web_icon"></i> <t t-esc="menu.name"/></span>
- 第 59 行:
<span><i t-att-class="menu.web_icon"></i> <t t-esc="menu.name"/></span>
- 第 47 行:
<t t-name="Menu.sections">
- 第 81 行:
<i t-att-class="second_level_menu.web_icon"></i> <t t-esc="second_level_menu.name"/>
- 第 81 行:
要在菜单的图标字段中设置的数据是整个字体真棒 CSS classes:
fa fa-check
如果你添加更多的图标集就好了,你不需要再次修改模板。
但是如果你想强制使用 font-awesome,或者想使用另一个图标集,比如 font-awesome solid(使用 fas
class),你可以在模板中使用这个标记:
<i t-attf-class="fas fa-#{menu.web_icon}"></i>
(注意t-attf-<name>
使用"attribute function")
因此该字段中的数据将仅为 check
...
最后,最好的应该是创建一个模块来继承模板并进行此修改,而不是像我那样直接修改它...
并添加更多 CSS 样式以正确对齐图标和文本(此处图标大小不同)。