You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:37:42