当前位置: 首页 > 知识教程 > 让Openerp的必填字段标签后面带上红色星号
让Openerp的必填字段标签后面带上红色星号
Odoo,OpenERP中文网 / 2014-05-20

 openerp中,必填字段是以浅蓝色的背景 来标识的。 不过,有些用户习惯在必填字段标签的后面加红色星号。 百度一下“红色星号, 必填” 得到56400个搜索结果呢。

 
要想openerp的必填字段标签后面带上红色星号, 需要做如下四处修改
 
 
第一处
文件名:form_view.js
类:      instance.web.form.FormRenderingEngine
函数:   preprocess_field:
原代码段:
        var $label = $('').attr({
            'for' : name,
            "modifiers": JSON.stringify({invisible: field_modifiers.invisible}),
            "string": $field.attr('string'),
            "help": $field.attr('help'),
            "class": $field.attr('class'),
        });
修改后的代码
        var $label = $('').attr({
            'for' : name,
            "modifiers": JSON.stringify({invisible: field_modifiers.invisible}),
            "string": $field.attr('string'),
            "help": $field.attr('help'),
            "class": $field.attr('class'),
            "required": field_modifiers.required, // added by laoliu
        });
 
第二处
文件名:form_view.js
类:      instance.web.form.FormRenderingEngine
函数:   process_label:
原代码段:
       var dict = {
            string: $label.attr('string') || (field_orm || {}).string || '',
            help: $label.attr('help') || (field_orm || {}).help || '',
            _for: name ? _.uniqueId('oe-field-input-') : undefined,
        };
 
 修改后的代码
         var dict = {
            string: $label.attr('string') || (field_orm || {}).string || '',
            help: $label.attr('help') || (field_orm || {}).help || '',
            _for: name ? _.uniqueId('oe-field-input-') : undefined,
            required: $label.attr('required') || (field_orm || {}).required ? '*' : undefined,
        };
 
第三处
文件名:base.xml
模板名称:FormRenderingLabel
原代码段:
       〈t t-esc="string"/>  
修改后的代码段
       〈t t-esc="string"/>  
       〈span class="mandatory"〉 〈t t-esc="required"/〉〈/span〉
 
第四处
文件名:base.css
在文件末尾增加如下代码段
 
.openerp .oe_form .mandatory {
  font-weight: bold;
  color: red !important;
  font-size: 120% !important;
  top: 4px !important;
}
 
 
分析:
故名思议,FormRenderingEngine是用来渲染表单显示的引擎。
函数preprocess_field 的作用是对某个字段进行预处理, 得到该字段所应显示的标签$label属性, 在原来的代码中, 没有考虑是否必填项。 因此我们新加了一项required 属性
函数process_label的作用是将标签属性$label.attr转换为字典, 并使用render_element('FormRenderingLabel', dict)  处理模板FormRenderingLabel
我们在该模板中增加了一个span, 以便在必填项的后面增加星号
最后,我们增加了一个样式, 使得星号显示成红色。