diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py index d406bef13ca..02fbafc0a51 100644 --- a/addons/website_blog/controllers/main.py +++ b/addons/website_blog/controllers/main.py @@ -27,12 +27,15 @@ from openerp import SUPERUSER_ID import werkzeug import random import json +from datetime import datetime +import random + from openerp.tools import html2plaintext class WebsiteBlog(http.Controller): - _blog_post_per_page = 6 - _post_comment_per_page = 6 + _blog_post_per_page = 20 + _post_comment_per_page = 10 def nav_list(self): blog_post_obj = request.registry['blog.post'] @@ -44,7 +47,7 @@ class WebsiteBlog(http.Controller): @http.route([ '/blog', - '/blog/page//', + '/blog/page/', ], type='http', auth="public", website=True, multilang=True) def blogs(self, page=1): BYPAGE = 60 @@ -65,14 +68,14 @@ class WebsiteBlog(http.Controller): }) @http.route([ - '/blog//', - '/blog//page//', - '/blog//tag//', - '/blog//tag//page//', - '/blog//date//', - '/blog//date//page//', - '/blog//tag//date//', - '/blog//tag//date//page//', + '/blog/', + '/blog//page/', + '/blog//tag/', + '/blog//tag//page/', + '/blog//date/', + '/blog//date//page/', + '/blog//tag//date/', + '/blog//tag//date//page/', ], type='http', auth="public", website=True, multilang=True) def blog(self, blog=None, tag=None, date=None, page=1, **opt): """ Prepare all values to display the blog. @@ -93,20 +96,15 @@ class WebsiteBlog(http.Controller): - 'tag': current tag, if tag_id - 'nav_list': a dict [year][month] for archives navigation """ - BYPAGE = 10 - cr, uid, context = request.cr, request.uid, request.context blog_post_obj = request.registry['blog.post'] - blog_posts = None - blog_obj = request.registry['blog.blog'] blog_ids = blog_obj.search(cr, uid, [], context=context) blogs = blog_obj.browse(cr, uid, blog_ids, context=context) path_filter = "" domain = [] - if blog: path_filter += "%s/" % blog.id domain += [("blog_id", "=", [blog.id])] @@ -117,19 +115,15 @@ class WebsiteBlog(http.Controller): path_filter += "date/%s/" % date domain += [("create_date", ">=", date.split("_")[0]), ("create_date", "<=", date.split("_")[1])] - blog_post_ids = blog_post_obj.search(cr, uid, domain, context=context) - blog_posts = blog_post_obj.browse(cr, uid, blog_post_ids, context=context) - + blog_post_count = blog_post_obj.search(cr, uid, domain, count=True, context=context) pager = request.website.pager( url="/blog/%s" % path_filter, - total=len(blog_posts), + total=blog_post_count, page=page, step=self._blog_post_per_page, - scope=BYPAGE + scope=10 ) - pager_begin = (page - 1) * self._blog_post_per_page - pager_end = page * self._blog_post_per_page - blog_posts = blog_posts[pager_begin:pager_end] + blog_posts = blog_post_obj.browse(cr, uid, blog_post_ids, context=context, limit=self._blog_post_per_page, offset=pager['offset']) tag_obj = request.registry['blog.tag'] tag_ids = tag_obj.search(cr, uid, [], context=context) @@ -147,13 +141,12 @@ class WebsiteBlog(http.Controller): 'date': date, } response = request.website.render("website_blog.blog_post_short", values) - response.set_cookie('unvisited', json.dumps(blog_post_ids)) return response @http.route([ - '/blogpost//', + '/blog//post/', ], type='http', auth="public", website=True, multilang=True) - def blog_post(self, blog_post, tag=None, date=None, page=1, enable_editor=None, **post): + def blog_post(self, blog, blog_post, enable_editor=None, **post): """ Prepare all values to display the blog. :param blog_post: blog post currently browsed. If not set, the user is @@ -178,65 +171,38 @@ class WebsiteBlog(http.Controller): - 'nav_list': a dict [year][month] for archives navigation - 'next_blog': next blog post , display in footer """ - - pager_url = "/blogpost/%s" % blog_post.id - - pager = request.website.pager( - url=pager_url, - total=len(blog_post.website_message_ids), - page=page, - step=self._post_comment_per_page, - scope=7 - ) - pager_begin = (page - 1) * self._post_comment_per_page - pager_end = page * self._post_comment_per_page - blog_post.website_message_ids = blog_post.website_message_ids[pager_begin:pager_end] - cr, uid, context = request.cr, request.uid, request.context - blog_obj = request.registry['blog.blog'] - blog_ids = blog_obj.search(cr, uid, [], context=context) - blogs = blog_obj.browse(cr, uid, blog_ids, context=context) - - 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) - + if not blog_post.blog_id.id==blog.id: + return request.redirect("/blog/%s/post/%s" % (blog_post.blog_id.id, blog_post.id)) blog_post_obj = request.registry.get('blog.post') - if not request.httprequest.session.get(blog_post.id,False): - request.httprequest.session[blog_post.id] = True - counter = blog_post.visits + 1; - blog_post_obj.write(cr, SUPERUSER_ID, [blog_post.id], {'visits':counter},context=context) - - MONTHS = [None, _('January'), _('February'), _('March'), _('April'), - _('May'), _('June'), _('July'), _('August'), _('September'), - _('October'), _('November'), _('December')] # Find next Post visited_blogs = request.httprequest.cookies.get('visited_blogs') or '' - visited_ids = map(lambda x: int(x or blog_post.id), visited_blogs.split(',')) + [blog_post.id] + visited_ids = filter(None, visited_blogs.split(',')) + visited_ids = map(lambda x: int(x), visited_ids) if blog_post.id not in visited_ids: visited_ids.append(blog_post.id) next_post_id = blog_post_obj.search(cr, uid, [ ('id', 'not in', visited_ids), - ], order='visits desc', limit=1, context=context) + ], order='ranking desc', limit=1, context=context) next_post = next_post_id and blog_post_obj.browse(cr, uid, next_post_id[0], context=context) or False values = { - 'blog': blog_post.blog_id, - 'blogs': blogs, - 'tags': tags, - 'tag': tag and request.registry['blog.tag'].browse(cr, uid, int(tag), context=context) or None, + 'blog': blog, 'blog_post': blog_post, 'main_object': blog_post, - 'pager': pager, - 'nav_list': self.nav_list(), 'enable_editor': enable_editor, - 'date': date, - 'date_name': date and "%s %s" % (MONTHS[int(date.split("-")[1])], date.split("-")[0]) or None, 'next_post' : next_post, } response = request.website.render("website_blog.blog_post_complete", values) response.set_cookie('visited_blogs', ','.join(map(str, visited_ids))) + + # Increase counter and ranking ratio for order + d = datetime.now() - datetime.strptime(blog_post.create_date, "%Y-%m-%d %H:%M:%S") + blog_post_obj.write(cr, SUPERUSER_ID, [blog_post.id], { + 'visits': blog_post.visits+1, + 'ranking': (blog_post.visits+1) * (1+random.random()) / max(1, 10+d.days) + },context=context) return response def _blog_post_message(self, user, blog_post_id=0, **post): diff --git a/addons/website_blog/models/website_blog.py b/addons/website_blog/models/website_blog.py index 230bd38a537..24ced1619d5 100644 --- a/addons/website_blog/models/website_blog.py +++ b/addons/website_blog/models/website_blog.py @@ -100,11 +100,13 @@ class BlogPost(osv.Model): select=True, readonly=True, ), 'visits': fields.integer('No of Views'), + 'ranking': fields.float('Ranking'), 'author_image': fields.related('create_uid','partner_id', 'image_small', string='Author Photo', type='binary') } _defaults = { 'website_published': False, - 'visits': 0 + 'visits': 0, + 'ranking': 0 } def create(self, cr, uid, vals, context=None): diff --git a/addons/website_blog/static/src/css/website_blog.css b/addons/website_blog/static/src/css/website_blog.css index b00111201db..bb50941f2b0 100644 --- a/addons/website_blog/static/src/css/website_blog.css +++ b/addons/website_blog/static/src/css/website_blog.css @@ -35,7 +35,7 @@ p.post-meta { .cover .blog_title { position: absolute; text-align: center; - top: 10%; + top: 20%; left: 0; right: 0; } diff --git a/addons/website_blog/static/src/css/website_blog.sass b/addons/website_blog/static/src/css/website_blog.sass index 1e293158bbe..3a744acc821 100644 --- a/addons/website_blog/static/src/css/website_blog.sass +++ b/addons/website_blog/static/src/css/website_blog.sass @@ -32,7 +32,7 @@ p.post-meta .blog_title position: absolute text-align: center - top: 10% + top: 20% left: 0 right: 0 h1 diff --git a/addons/website_blog/views/website_blog_templates.xml b/addons/website_blog/views/website_blog_templates.xml index 8c06623e13e..12b6404ca87 100644 --- a/addons/website_blog/views/website_blog_templates.xml +++ b/addons/website_blog/views/website_blog_templates.xml @@ -90,7 +90,7 @@