代码之家  ›  专栏  ›  技术社区  ›  Kode Kite

如何隐藏所有表单中的“创建和编辑”按钮,以及每行中的“搜索更多”按钮

  •  3
  • Kode Kite  · 技术社区  · 9 年前

    我想在所有表单中隐藏“创建和编辑”按钮

    我还想以各种形式显示“搜索更多”按钮

    Hide and Show button for all module

    目前我正在使用奥多10。

    让我们看看这个插件

    https://apps.openerp.com/apps/modules/9.0/web_m2x_options/

    我曾尝试使用该插件,但它根本不起作用。

    在这种情况下有人能帮我吗?无论是使用插件,还是其他简单的方法来完成我需要做的事情。

    如果有任何回复,我将不胜感激。

    提前谢谢。

    3 回复  |  直到 9 年前
        1
  •  2
  •   jo541    9 年前

    可以将其用于所有模块。但是你需要在ir中创建一个记录。配置。参数

    配置->技术->参数->系统参数

    要删除create_edit按钮,必须添加此信息。

    键:“web\u m2x\u选项。创建编辑” 值:“false”。

    要在任何many21和Many2many字段上添加更多搜索,您必须添加。

    键:“web\u m2x\u选项。搜索更多”

    PS:你可以在这个github页面上看到更多信息 https://github.com/OCA/web/tree/9.0/web_m2x_options

        2
  •  2
  •   Charif DZ    9 年前

    通过使用:

           <field name="many2one_field" options="{'create':true, 'quick_create':true}"/>
    

    现在,在costum模块目录下定义一个javascript文件来更改多个小部件

      you_costum_module_directory_name 
            --> static
                --> src 
                      --> js
                          --> costum_many2one_widget.js
    

    odoo.define('you_costum_module_directory_name.costum_many2one_widget' , function(require) {
        // I hope that you know how to add this to odoo backendassets
    
            // first we need core
            var core = require('web.core');
            // it's needed when we override get_search_result
            var data = require('web.data');
    
            // NOTE: i may forget to require some object in the code by mistake check it 
    
            // now we must get the many2one widget for form widget
            var FieldMany2One = core.form_widget_registry.get('many2one');
    
            // now we can override the method to change the behavor
            FieldMany2one.include({
                // if you want the search more to be always shown we must overrid
                // get_search_result and we need to require every thing we need first like data object
                // now to show search more always we must reimplement the 
                get_search_result: function(search_val) {
                    var self = this;
    
                    var dataset = new data.DataSet(this, this.field.relation, self.build_context());
                    this.last_query = search_val;
                    var exclusion_domain = [], ids_blacklist = this.get_search_blacklist();
                    if (!_(ids_blacklist).isEmpty()) {
                        exclusion_domain.push(['id', 'not in', ids_blacklist]);
                    }
    
                    return this.orderer.add(dataset.name_search(
                            search_val, new data.CompoundDomain(self.build_domain(), exclusion_domain),
                            'ilike', this.limit + 1, self.build_context())).then(function(_data) {
                        self.last_search = _data;
                        // possible selections for the m2o
                        var values = _.map(_data, function(x) {
                            x[1] = x[1].split("\n")[0];
                            return {
                                label: _.str.escapeHTML(x[1].trim()) || data.noDisplayContent,
                                value: x[1],
                                name: x[1],
                                id: x[0],
                            };
                        });
    
                        // show search more if there is only one element at least 
                        // you can make it 0 if you want
                        if (values.length >= 1) {
                            values = values.slice(0, self.limit);
                            values.push({
                                label: _t("Search More..."),
                                action: function() {
                                    dataset.name_search(search_val, self.build_domain(), 'ilike', 160).done(function(_data) {
                                        self._search_create_popup("search", _data);
                                    });
                                },
                                classname: 'o_m2o_dropdown_option'
                            });
                        }
                        // if the user provide an option quick_create show quick create
                        var raw_result = _(_data.result).map(function(x) {return x[1];});
                        if (
                            search_val.length > 0 && 
                            !_.include(raw_result, search_val) &&
                            self.options && self.options.quick_create
                            ) {
                            self.can_create && values.push({
                                label: _.str.sprintf(_t('Create "<strong>%s</strong>"'),
                                    $('<span />').text(search_val).html()),
                                action: function() {
                                    self._quick_create(search_val);
                                },
                                classname: 'o_m2o_dropdown_option'
                            });
                        }
                        // if the user provide a create option show create and Edit option
                        if (self.options && self.options.create && self.can_create){
                            values.push({
                                label: _t("Create and Edit..."),
                                action: function() {
                                    self._search_create_popup("form", undefined, self._create_context(search_val));
                                },
                                classname: 'o_m2o_dropdown_option'
                            });
                        }
                        else if (values.length === 0) {
                            values.push({
                                label: _t("No results to show..."),
                                action: function() {},
                                classname: 'o_m2o_dropdown_option'
                            });
                        }
    
                        return values;
                    });
                }
            });
    
    
            // id don't know if this line is required or not 
            // but if we have to registre the widget again
            core.form_widget_registry.add('many2one', FieldMany2One);
    
        }); 
    

    现在,您需要将js文件添加到后端资产模板中

    you_costum_module_directory_name 
                --> static
                    --> src 
                          --> js
                              --> costum_many2one_widget.js
    
                --> xml
                    --> widgets.xml
    

    将xml文件添加到清单:

    <?xml version="1.0" encoding="utf-8" ?>
        <openerp> <!-- odoo in odoo 10.0 -->
            <data>
    
                <!--We need to load our js file to backend_assets-->
                <template id="assets_backend" name="many2one new edits " inherit_id="web.assets_backend">
                    <xpath expr="." position="inside">
                        <script type="text/javascript" src="/you_costum_module_directory_name/static/src/js/costum_many2one_widget.js"></script>
                    </xpath>
                </template>
    
            </data>
        </openerp>
    

    在你的舱单上 __openerp__.py 添加xml文件:

        3
  •  1
  •   khelili miliana    9 年前

    您可以将选择小部件带到您的字段:

    <field name="your_one2many_field" widget="selection"/>
    

    要隐藏“创建和编辑”,请使用:

    <field name="your_one2many_field" options="{'no_create_edit':True}"/>