Odoo 14如何按标签筛选展示博客文章
Odoo Blog按特定标签筛选最新文章区块实现方法
要实现按标签筛选最新文章的功能,需从前端代码修改和后端逻辑扩展两部分入手,具体步骤如下:
1. 修改前端代码片段
在现有s_latest_posts区块的js_get_posts容器中,新增自定义数据属性data-filter-by-tag-ids,传入目标标签的ID(多个标签用逗号分隔)。修改后的代码示例:
<section class="s_latest_posts pt16 pb16 o_colored_level" data-vcss="001" data-snippet="s_latest_posts" data-name="Blog Posts"> <div class="container"> <div class="row s_col_no_bgcolor s_nb_column_fixed js_get_posts s_latest_posts_card s_latest_posts_effect_marley" data-loading="true" data-template="website_blog.s_latest_posts_card_template" data-filter-by-blog-id="0" data-filter-by-tag-ids="3,5" <!-- 替换为你的目标标签ID --> data-order="published_date desc"/> </div> </section>
标签ID获取方式:
- 进入Odoo后台「博客 > 标签」页面,点击目标标签,从URL中提取ID(如
/blog/tag/3中的3) - 开启开发者模式后,直接查看标签记录的ID字段
2. 扩展后端控制器逻辑
找到website_blog模块中负责加载最新文章的控制器(通常在controllers/main.py),修改文章查询逻辑,加入标签筛选条件:
# 在获取文章的方法中(如def latest_posts) tag_ids = request.params.get('filter_by_tag_ids') domain = [('is_published', '=', True)] # 保留原有博客ID筛选逻辑 blog_id = request.params.get('filter_by_blog_id') if blog_id and blog_id != '0': domain.append(('blog_id', '=', int(blog_id))) # 新增标签筛选逻辑 if tag_ids: tag_ids = list(map(int, tag_ids.split(','))) domain.append(('tag_ids', 'in', tag_ids)) # 执行查询 posts = request.env['blog.post'].search(domain, order=request.params.get('order', 'published_date desc'), limit=limit)
3. 验证功能
修改完成后刷新前端页面,该区块将自动加载符合指定标签的最新发布文章。若页面存在缓存,需清除缓存确保修改生效。
内容的提问来源于stack exchange,提问作者george
相关产品推荐
相关产品推荐

