Showing posts with label web controller odoo. Show all posts
Showing posts with label 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")