【问题标题】:How to change the sheet tag width in Odoo?如何更改 Odoo 中的工作表标签宽度?
【发布时间】:2015-10-20 06:43:42
【问题描述】:

有没有办法在 Odoo 中更改特定表单的 工作表宽度?我创建了一个 css 文件来更改工作表标签宽度,但所有表单标签宽度都已更改。我只想更改某种形式的宽度。是否可以?

【问题讨论】:

  • 你有什么想法?你能把你的代码放在这里吗?
  • 你应该使用带有工作表标签<sheet style="width:100%">的内联css。
  • @EmiproTechnologiesPvt.Ltd.谢谢

标签: css odoo-8 odoo


【解决方案1】:

您可以删除视图中的工作表节点,以便将宽度扩大到 100%。只需将此函数添加到您的模型中:

from lxml import etree
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
    res = models.Model.fields_view_get(self, cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu)
    if view_type == 'form':
        doc = etree.XML(res['arch'])
        for sheet in doc.xpath("//sheet"):
            parent = sheet.getparent()
        for child in sheet:
            parent.append(child)
        parent.remove(sheet)
        res['arch'] = etree.tostring(doc)
    return res

这是my question 4 周前的回答

如果你有一个消息框,你可能想用这个来保持布局的顺序

def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
    """ Remove the sheet node keeping the elements inside """
    res = models.Model.fields_view_get(self, cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu)
    if view_type == 'form':
        doc = etree.XML(res['arch'])
        for sheet in doc.xpath("//sheet"):
            for oe_chatter in doc.xpath("//div[@class='oe_chatter']"):
                sheet.append(oe_chatter)
            parent = sheet.getparent()
        for child in sheet:
            parent.append(child)
        parent.remove(sheet)
        res['arch'] = etree.tostring(doc)
    return res

更新

还有一个社区模块可以达到类似的效果web_sheet_full_width

【讨论】:

    【解决方案2】:

    您还可以通过重新定义 _renderNode 函数来覆盖工作表组件的渲染方式。您可以将样式直接更改为 HTML 组件 var $sheet = $('<div style='width:100%'>', {class: 'clearfix position-relative o_form_sheet'}) 或将您的自定义类指定为 XML 视图 $sheet.addClass(node.attrs['class']); 中的属性。这个新类也必须在 CSS 代码中定义。

    odoo.define('<your_module>.form_renderer', function (require) {
         "use strict";
         var FormRenderer = require('web.FormRenderer');
    
         FormRenderer.include({
          _renderNode: function (node) {
            if (node.tag === 'sheet') {
                this.has_sheet = true;
                var $sheet = $('<div>', {class: 'clearfix position-relative o_form_sheet'});
                if(node.attrs['class']){
                    $sheet.addClass(node.attrs['class']);
                }
                $sheet.append(node.children.map(this._renderNode.bind(this)));
                return $sheet;
                } else {
                    return this._super.apply(this, arguments);
                }
             },
        });    
    });
    

    【讨论】:

      【解决方案3】:

      为了在 odoo v8 上获得相同的结果,我做了一些更改。

      @api.model
      def fields_view_get(self, view_id=None, view_type=False, toolbar=False,
                          submenu=False):
          context = self._context
      
          def get_view_id(xid, name):
              try:
                  return self.env['ir.model.data'].xmlid_to_res_id(xid,
                                                              raise_if_not_found=True)
              except ValueError:
                  try:
                      return self.env['ir.ui.view'].search([('name', '=', name)], 
                                                           limit=1).id
                  except Exception:
                      return False    # view not found
      
          if not view_type:
              view_id = get_view_id('stock_landed_costs.view_stock_landed_cost_tree',
                                    'stock.landed.cost.tree')
              view_type = 'tree'
          elif view_type == 'form':
              view_id = get_view_id('stock_landed_costs.view_stock_landed_cost_form', 
                                    'stock.landed.cost.form')
      
          res = super(stock_landed_cost, self).fields_view_get(view_id=view_id,
                                                               view_type=view_type,
                                                               toolbar=toolbar,
                                                               submenu=submenu)
          if view_type == 'form':
              doc = etree.XML(res['arch'])
              for sheet in doc.xpath("//sheet"):
                  for oe_chatter in doc.xpath("//div[@class='oe_chatter']"):
                      sheet.append(oe_chatter)
                  parent = sheet.getparent()
              for child in sheet:
                  parent.append(child)
              parent.remove(sheet)
              res['arch'] = etree.tostring(doc)
          return res
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多