所有模块中的配置视图定义都需要继承res_config_settings_view_form,而且其中的html也需要符合相应的规范。我们来看一个简单的定义:
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.account</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="40"/>
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('settings')]" position="inside">
<div class="app_settings_block" data-string="Invoicing" string="Invoicing" data-key="account" groups="account.group_account_manager">
<h2>Taxes</h2>
<div class="row mt16 o_settings_container" name="default_taxes_setting_container">
//具体的配置字段布局
</div>
</div>
</xpath>
</field>
</record>
上面定义中几个关键的点:
-
需要继承base.res_config_settings_view_form
-
xpath定位基本不用改,就是这样子在祖先视图的
中增加一个新的div元素 -
xpath下的第一个元素必须是div,并且赋予class='app_settings_block‘,通过查看js会知道其实配置界面左边的导航列表就是取这里定义的class为app_settings_block的所有div元素构成的。
-
这里的第一个div元素还有一些重要的属性,data-string为设置中左边导航位置显示的文字内容,另外图标是默认显示模块中的/static/description/icon.png,data-key为模块名称,表示这一段配置是属于哪一个模块,groups指定有权限修改配置的群组。
-
第一个div下一级,一般就是一个h2元素搭配一个div元素,用于表示配置中某一个范围的参数,h2元素是范围名称,div是参数布局html。