在odoo 10中为状态栏添加颜色

Posted

技术标签:

【中文标题】在odoo 10中为状态栏添加颜色【英文标题】:Add colurs to statusbar in odoo10 【发布时间】:2020-01-03 16:57:39 【问题描述】:

需要在odoo10的状态栏中添加颜色,可用的openerp版本 例如:<field name = 'state' widget=statusbar clickabe= 'True' statubar_colors='"new": "blue"'>

odoo10如何在状态栏中添加颜色

状态栏的不同状态需要不同的颜色 例如:蓝色代表草稿,绿色代表进度,红色代表取消

【问题讨论】:

【参考方案1】:

有两种解决方案可以满足您的要求:

    如果您只需要一个表单视图的这种行为,就这么简单:

只需添加style标签即可击败Odoo生成的css selector

        <style>
            .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled 
               background: yellow;
            
            .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled::after 
               border-left-color: yellow;
            
        </style>
        ...
        ...
        <field name ="state" widget="statusbar">

在这里我使用了相同的css selector,因为它是在Odoo selector 之后加载的,它是使用的那个,请注意我的状态裸按钮有.disabled 类,因为它是readonly 我认为你必须更改clickabe= 'True'表示它不是只读的。

    如果您想在此处为您的所有模型使用此功能,您需要使用 css file 并将其添加到 assets_backend 模板,确保您的选择器优于 Odoo 选择器。
   <template id="assets_backend" name="backend" inherit_id="web.assets_backend">
        <xpath expr="." position="inside">
            <link rel="stylesheet" href="/your_addon_name/static/src/css/your_css_file_name.css"/>
        </xpath>
    </template>

现在我不知道你想怎么改变颜色,这里,你需要处理CSS来选择正确的元素, 例如,如果您只想在"new" 值为selected 时使状态栏颜色为blue,那么你很幸运 Odoo 显示属性data-value 中的值selected 不会因翻译而改变。

   .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled[data-value="new"] 
        background: blue;
    
    .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled[data-value="new"]::after 
       border-left-color: blue;
    

这是在 Odoo 11 中,当我检查元素时,我注意到了:

选择的状态有btn-primary 其余的有btn-default 只读有属性disabled="disabled"和类disabled

只是为了表明这项工作这是我所拥有的屏幕截图,您可能会有一些副作用,即当您在popup 中打开一些record 时,这个form 仍然显示在网络中页面,如果它有一个statuswidget,这也会影响显示的记录,因为style tag 将在form 视图被删除删除 > 来自网页。

编辑

假设您的选择有两个值:新的、有效的

如果被选中,这将变为蓝色,并且对绿色有效

<style>

       .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled[data-value="new"] 
            background: blue;
        
        .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled[data-value="new"]::after 
           border-left-color: blue;
        

        .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled[data-value="progress"] 
            background: blue;
        
        .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled[data-value="progress"]::after 
           border-left-color: blue;
        

        .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled[data-value="cancel"] 
            background: red;
        
        .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled[data-value="cancel"]::after 
           border-left-color: red;
        
</style>
...
...
...
<field name="state" .....>

这都是关于data-value 选择字段的全部内容,希望您明白这一点。这比处理 javascript 更容易。

【讨论】:

感谢回复,不同状态需要不同颜色 是的,你可以为所欲为,我刚刚告诉你,你必须使用数据值来选择不同的元素并为每个元素指定不同的颜色。 只需编辑您的问题并显示您的字段状态的不同值,以及您希望每个选定值的颜色,我会为您提供帮助,如果您不知道该怎么做,请查看我的编辑对你应该做什么有一个想法 很好地解释了@ElegantOdoo。 @user9523333 我在最后解释了只是在表单视图中定义一个样式标签,最好在表单标签之前,它将仅应用于该表单视图【参考方案2】:

这个功能很久以前就从 Odoo 中删除了。

https://github.com/odoo/odoo/issues/5987

https://github.com/odoo/odoo/pull/11199

如果您需要添加此功能,则必须为其创建一个新小部件。

【讨论】:

【参考方案3】:
 inherit_id="web.assets_backend"

根据需要添加样式,也可以在css中赋予样式

【讨论】:

以上是关于在odoo 10中为状态栏添加颜色的主要内容,如果未能解决你的问题,请参考以下文章

向状态栏添加颜色时,在状态栏下方添加额外的填充(在 iOS 中)

更改每个屏幕的状态栏颜色

Python OpenCV - 添加状态栏以显示鼠标位置和颜色 RGB

使用 Xcode 和 Swift 创建的 iOS 应用程序中状态栏的自定义背景颜色

无法使我的状态栏颜色与 SwiftUI 中的导航栏颜色匹配

iOS 修改状态栏颜色