Odoo-自定义模板菜单加载

时间:2018-12-11 03:49:23

标签: python odoo

当前,我正在使用oodo模块,该模块需要有自己的(定制和设计的)仪表板。因此,只有当用户登录到后端(他可以管理应用程序,设置和类似内容)时,该仪表板才会显示。

似乎唯一可行的方法是创建一个单独的控制器,呈现为该控制器/仪表板实现的特定模板,并将其与菜单按钮绑定。

这很好,但是当我们渲染模板时,它是空白的。我想为此模板加载标准的后端菜单-以及在模板主体上的正常工作。

我是否可以继承任何视图,或者可以使用任何方式创建模板,以自动为该模板加载顶部菜单栏?


我试图继承“ web.webclient_bootstrap”模板,并在此模板的主div内附加内容,但无法正常工作。似乎在继承此模板时,session_info为空?

1 个答案:

答案 0 :(得分:6)

在研究了odoo源代码之后-与更多参与odoo开发的人们进行了讨论-总体而言-与odoo进行了更多合作-我找到了实现此目的的方法。

最初的问题有一个错误的假设-这可以通过使用控制器进行渲染来实现。需要理解的重要一点是-odoo后端呈现为“单个js页面”,并且仪表板端的任何类型的自定义(您可以在视图中定义的odoo默认不提供)-需要通过直接使用javascript创建js小部件并更改dom对象。

以下解决方案表示仪表板侧的一个操作/页面-它将仅显示“ Test”字样的空白页面。

odoo.define("mymodule.customdashboard", function (require) {
    "use strict";

    var core = require("web.core");
    var AbstractAction = require("web.AbstractAction");
    var Widget = require("web.Widget");

    var qweb = core.qweb;
    var _t = core._t;

    require("web.dom_ready");

    var CustomDashboard = AbstractAction.extend({
        template: "custom_dashboard",
        events: {
        },

        init: function(parent, action){
            this._super.apply(this, arguments);
            var options = action.params || {};
            this.params = options;
        },

        start: function(){
            this.$(".dashboard-wrapper").append(qweb.render("campaign_dashboard_campaign_list", {"someArgData": "Test"}));
        }
    });

    core.action_registry.add("custom.dashboard", CustomDashboard);

    return {
        CustomDashboard: CustomDashboard
    }
});

其中 campaign_dashboard_campaign_list 是要调用的模板的名称,并带有参数,并与所有html数据一起插入包含类 .dashboard-wrapper的dom元素中。 strong>(该类存在于类顶部定义的另一个名为 custom_dashboard 的模板中。