Odoo - 自定义模板菜单加载

Odoo - Custom template menu load

目前我正在开发 odoo 模块,它需要有自己的(定制和设计的)仪表板。因此,只有当用户登录到后端(他能够管理应用程序、设置和类似的东西)时,这个仪表板才会可见。

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

一切都很好,但是当我们渲染模板时,它是空白的。我想为此模板加载标准后端菜单 - 并且只是在模板主体上工作。

有没有我可以继承的视图,或者我可以使用的任何方式,我可以在其中创建一个模板,该模板会自动为该模板加载顶部菜单栏?


我试图继承“web.webclient_bootstrap”模板,并在该模板的主要 div 中追加内容,但它不起作用。好像在继承这个模板的时候,session_info是空的?

在研究了 odoo 源代码之后 - 与更多参与 odoo 开发的人进行了讨论 - 总的来说 - 更多地使用 odoo - 我找到了如何做到这一点的方法。

最初的问题有一个错误的假设——这可以通过使用控制器进行渲染来实现。重要的是要理解 - odoo 后端呈现为 "single js page",并且仪表板端的任何类型的自定义(odoo 默认不提供,您可以在视图中定义) - 需要由完成使用 javascript.

直接创建 js 小部件和更改 dom 对象

下面的解决方案表示仪表板侧的 action/page - 这将呈现空白页面,上面只有 "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 数据一起插入到 dom 包含 class .dashboard-wrapper 的元素(存在于另一个名为 custom_dashboard 的模板中,定义于class.

的顶部