From b21b32ed2e624896173b6bda9d1f686a57ce58e0 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Tue, 2 Dec 2014 10:28:18 +0100 Subject: [PATCH] [FIX] website_blog: Show tag by blog. No interest to display all tag, anyway the search by tag is done for the current blog --- addons/website_blog/controllers/main.py | 4 +--- addons/website_blog/models/website_blog.py | 26 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py index b6812de155f..5f2bea84df6 100644 --- a/addons/website_blog/controllers/main.py +++ b/addons/website_blog/controllers/main.py @@ -135,9 +135,7 @@ class WebsiteBlog(http.Controller): pager_end = page * self._blog_post_per_page blog_posts = blog_posts[pager_begin:pager_end] - tag_obj = request.registry['blog.tag'] - tag_ids = tag_obj.search(cr, uid, [], context=context) - tags = tag_obj.browse(cr, uid, tag_ids, context=context) + tags = blog.all_tags()[blog.id] values = { 'blog': blog, diff --git a/addons/website_blog/models/website_blog.py b/addons/website_blog/models/website_blog.py index 4aa78f68239..94cee66230f 100644 --- a/addons/website_blog/models/website_blog.py +++ b/addons/website_blog/models/website_blog.py @@ -23,6 +23,32 @@ class Blog(osv.Model): 'description': fields.text('Description'), } + def all_tags(self, cr, uid, ids, min_limit=1, context=None): + req = """ + SELECT + p.blog_id, count(*), r.blog_tag_id + FROM + blog_post_blog_tag_rel r + join blog_post p on r.blog_post_id=p.id + WHERE + p.blog_id in %s + GROUP BY + p.blog_id, + r.blog_tag_id + ORDER BY + count(*) DESC + """ + cr.execute(req, [tuple(ids)]) + tag_by_blog = {i: [] for i in ids} + for blog_id, freq, tag_id in cr.fetchall(): + if freq >= min_limit: + tag_by_blog[blog_id].append(tag_id) + + tag_obj = self.pool['blog.tag'] + for blog_id in tag_by_blog: + tag_by_blog[blog_id] = tag_obj.browse(cr, uid, tag_by_blog[blog_id], context=context) + return tag_by_blog + class BlogTag(osv.Model): _name = 'blog.tag'