diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py
index ecb6d47aca7..8adb6c5b9e6 100644
--- a/addons/website_blog/controllers/main.py
+++ b/addons/website_blog/controllers/main.py
@@ -149,11 +149,15 @@ class WebsiteBlog(http.Controller):
tag_ids.append(current_tag)
tag_ids = request.env['blog.tag'].browse(tag_ids).exists()
return ','.join(slug(tag) for tag in tag_ids)
+
+ tag_category = sorted(all_tags.mapped('category_id'), key=lambda category: category.name.upper())
+ other_tags = sorted(all_tags.filtered(lambda x: not x.category_id), key=lambda tag: tag.name.upper())
+
values = {
'blog': blog,
'blogs': blogs,
'main_object': blog,
- 'tags': all_tags,
+ 'other_tags': other_tags,
'state_info': {"state": state, "published": published_count, "unpublished": unpublished_count},
'active_tag_ids': active_tag_ids,
'tags_list' : tags_list,
@@ -163,6 +167,7 @@ class WebsiteBlog(http.Controller):
'nav_list': self.nav_list(blog),
'blog_url': blog_url,
'date': date_begin,
+ 'tag_category': tag_category,
}
response = request.render("website_blog.blog_post_short", values)
return response
diff --git a/addons/website_blog/models/website_blog.py b/addons/website_blog/models/website_blog.py
index e6957a34412..038bc6ce778 100644
--- a/addons/website_blog/models/website_blog.py
+++ b/addons/website_blog/models/website_blog.py
@@ -77,6 +77,19 @@ class Blog(models.Model):
return tag_by_blog
+class BlogTagCategory(models.Model):
+ _name = 'blog.tag.category'
+ _description = 'Blog Tag Category'
+ _order = 'name'
+
+ name = fields.Char('Name', required=True, translate=True)
+ tag_ids = fields.One2many('blog.tag', 'category_id', string='Tags')
+
+ _sql_constraints = [
+ ('name_uniq', 'unique (name)', "Tag category already exists !"),
+ ]
+
+
class BlogTag(models.Model):
_name = 'blog.tag'
_description = 'Blog Tag'
@@ -84,6 +97,7 @@ class BlogTag(models.Model):
_order = 'name'
name = fields.Char('Name', required=True, translate=True)
+ category_id = fields.Many2one('blog.tag.category', 'Category', index=True)
post_ids = fields.Many2many('blog.post', string='Posts')
_sql_constraints = [
diff --git a/addons/website_blog/security/ir.model.access.csv b/addons/website_blog/security/ir.model.access.csv
index c3f549640ae..c357d62525f 100644
--- a/addons/website_blog/security/ir.model.access.csv
+++ b/addons/website_blog/security/ir.model.access.csv
@@ -5,3 +5,5 @@ blog_post_all,blog.post,model_blog_post,,1,0,0,0
blog_post,blog.post,model_blog_post,website.group_website_designer,1,1,1,1
blog_tag,blog.tag,model_blog_tag,,1,0,0,0
blog_tag_edition,blog.tag,model_blog_tag,website.group_website_designer,1,1,1,1
+blog_tag_category,blog.tag.category,model_blog_tag_category,,1,0,0,0
+blog_tag_category,blog.tag.category,model_blog_tag_category,website.group_website_designer,1,1,1,1
diff --git a/addons/website_blog/static/src/js/website_blog.js b/addons/website_blog/static/src/js/website_blog.js
index 7985e0ebecc..df4733e5a6e 100644
--- a/addons/website_blog/static/src/js/website_blog.js
+++ b/addons/website_blog/static/src/js/website_blog.js
@@ -62,6 +62,16 @@ $(document).ready(function() {
$('.cover_footer').on('click', page_transist);
$('a[href^="#blog_content"]').on('click', animate);
$('.o_twitter, .o_facebook, .o_linkedin, .o_google, .o_twitter_complete, .o_facebook_complete, .o_linkedin_complete, .o_google_complete').on('click', shareArticle);
+ /* Archives years collapse */
+ $('.blog_post_year_collapse').on('click', function() {
+ $(this).find('i.fa').toggleClass('fa-chevron-down fa-chevron-right');
+ });
+ /* Collapse in active year */
+ var $activeYear = $('.blog_post_year li.active');
+ if ($activeYear.length) {
+ var id = $activeYear.closest('ul').attr('id');
+ $("li.blog_post_year_collapse[data-target='#"+ id +"']").click();
+ }
}
/* Sharing links hover in blogpost */
diff --git a/addons/website_blog/static/src/less/website_blog.less b/addons/website_blog/static/src/less/website_blog.less
index 9bfa937071c..f14b771df53 100644
--- a/addons/website_blog/static/src/less/website_blog.less
+++ b/addons/website_blog/static/src/less/website_blog.less
@@ -220,4 +220,15 @@
margin-top: 10px;
}
}
+
+ .blog_post_year_collapse {
+ cursor: pointer;
+ > i {
+ color: @brand-primary;
+ }
+ }
+
+ section.blog_tags ul.nav-pills li a {
+ padding: 2px 15px;
+ }
}
diff --git a/addons/website_blog/views/website_blog_templates.xml b/addons/website_blog/views/website_blog_templates.xml
index 2e5d467c3a0..cf60aa669a4 100644
--- a/addons/website_blog/views/website_blog_templates.xml
+++ b/addons/website_blog/views/website_blog_templates.xml
@@ -392,23 +392,43 @@
+
+
+
+
+
Tags
-