Showing posts with label how to overrode web controller odoo. Show all posts
Showing posts with label how to overrode web controller odoo. Show all posts

Tuesday 25 March 2014

Work with web-controller OpenERP



How to override web controller in openerp 8.0.

Here, i try to define one example that may be useful to you to understand how to work with web controller in openerp 8.0.

Existing controller (addons/web/controllers/main.py) :
- class name Home, and method index

class Home(http.Controller):

    @http.route('/', type='http', auth="none")
    def index(self, s_action=None, db=None, **kw):
        return http.local_redirect('/web', query=request.params, keep_hash=True)

Now, here i define how to override existing controller...
 - Here, my class name Website, and in parameter i pass path of controller which i want to inherit, so here "Home" class which is in addons/web/controllers/main.py so in path i pass : openerp.addons.web.controllers.main.Home.

 - @http.route : in openerp 8.0 the route system changed.
           '/' : '/' route will match the new index() method in Website.
        'type' : There are different type like http,json...
                 (http : normal http requests by passing, Json : Methods that received JSON can be defined by passing 'json')

class Website(openerp.addons.web.controllers.main.Home):
    @http.route('/', type='http', auth="public", website=True, multilang=True)
    def index(self, **kw):
        try:
            main_menu = request.registry['ir.model.data'].get_object(request.cr, request.uid, 'website', 'main_menu')
            first_menu = main_menu.child_id and main_menu.child_id[0]
            # Dont 302 loop on /
            if first_menu and not ((first_menu.url == '/') or first_menu.url.startswith('/#') or first_menu.url.startswith('/?')):
                return request.redirect(first_menu.url)
        except:
            pass
        return self.page("website.homepage")