ODOO 8 – Héritage de javascript (ex: affichage nom base de données)

Pour montrer comment modifier par héritage, un script javascript existant, je vais prendre l'exemple suivant :

  • comme cela est fait en mode "debug", afficher systématiquement, le nom de la base de données à droite du nom d'utilisateur

Pour cela, je vais partir du code inclus dans le fichier addons/web/static/src/js/chrome.js et mon objectif est de modifier par héritage la fonction "do_update" de "instance.web.UserMenu" (ligne 1025).

- créer un nouveau module dans /addons, appelé ici mydisplaydb avec l'arborescence suivante :

- laisser le fichier __init__.py vide

- créer le fichier __openerp__.py
{
'name': 'PMA Display DB Name',
'version': '1.0.0',
'category': '',
'sequence': 1,
'author': 'PMA',
'summary': 'Display DB Name',
'description': "",
'depends': ["web"],
'data': ['mydisplaydb.xml'],
'js': [],
'qweb': [],
'css':[],
'installable': True,
'application': False,
'auto_install': False,
}

- créer le fichier mydisplaydb.xml , ce qui va permettre d'inclure le nouveau script js dans l'asset bundle et ainsi de le charger dans le navigateur :
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="assets_backend" name="mydisplaydb" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/mydisplaydb/static/src/js/mydisplaydb.js"></script>
</xpath>
</template>
</data>
</openerp>

- créer le fichier mydisplaydb.js : mise en commentaire de la ligne " if(instance.session.debug)" dans la fonction "do_update" :
openerp.mydisplaydb = function (instance) {
   
    instance.web.UserMenu.include({
       do_update: function () {
        var self = this;
        var fct = function() {
            var $avatar = self.$el.find('.oe_topbar_avatar');
            $avatar.attr('src', $avatar.data('default-src'));
            if (!self.session.uid)
                return;
            var func = new instance.web.Model("res.users").get_func("read");
            return self.alive(func(self.session.uid, ["name", "company_id"])).then(function(res) {
                var topbar_name = res.name;
/* 
                if(instance.session.debug)
*/
                topbar_name = _.str.sprintf("%s (%s)", topbar_name, instance.session.db);
                if(res.company_id[0] > 1)
                    topbar_name = _.str.sprintf("%s (%s)", topbar_name, res.company_id[1]);
                self.$el.find('.oe_topbar_name').text(topbar_name);
                if (!instance.session.debug) {
                    topbar_name = _.str.sprintf("%s (%s)", topbar_name, instance.session.db);
                }
                var avatar_src = self.session.url('/web/binary/image', {model:'res.users', field: 'image_small', id: self.session.uid});
                $avatar.attr('src', avatar_src);

                openerp.web.bus.trigger('resize');  // Re-trigger the reflow logic
            });
        };
        this.update_promise = this.update_promise.then(fct, fct);
    }
    });
    }

- Une fois, ce module installé, le nom de la base s'affiche comme désiré              

2 réflexions au sujet de « ODOO 8 – Héritage de javascript (ex: affichage nom base de données) »

  1. I truly appreciate this post. I’ve been looking all over for this! Thank goodness I found it on Bing. You’ve made my day! Thanks again! dbgdkbdkaabe

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *