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

如何在Silverstripe首页调用指定ID博客的最新文章?

如何在Silverstripe中过滤指定博客的最新文章

你的问题很典型——默认的BlogPost::get()会拉取站点内所有博客的文章,所以我们需要通过关联的博客ID来精准筛选目标博客的内容。Silverstripe官方Blog模块中,BlogPost和Blog页面是通过BlogID外键关联的,利用这一点就能轻松实现需求。

这里提供两种实用方案:

方案1:固定目标博客ID(适合不需要动态切换的场景)

直接在查询中添加filter条件,指定你要展示的博客ID即可:

public function latestBlog($num = 3) {
    // 替换成你实际需要的博客ID(后台编辑博客时,URL里的数字就是该博客的ID)
    $targetBlogId = 5;
    
    return BlogPost::get()
        ->filter('BlogID', $targetBlogId) // 过滤指定博客的文章
        ->sort('PublishDate', 'desc')
        ->limit($num);
}

方案2:动态传入博客ID(更灵活的复用场景)

如果需要根据不同场景切换展示的博客,可以给函数增加一个$blogId参数:

public function latestBlog($num = 3, $blogId = null) {
    // 如果没有传入ID,可返回空集合或设置默认博客ID
    if (!$blogId) {
        return BlogPost::get()->limit(0);
    }
    
    return BlogPost::get()
        ->filter('BlogID', $blogId)
        ->sort('PublishDate', 'desc')
        ->limit($num);
}

小技巧:如何确认博客ID?

  • 后台编辑博客页面时,URL会类似/admin/pages/edit/show/5,这里的5就是该博客的ID;
  • 也可以通过博客的URL别名(URLSegment)来获取ID,避免硬编码:
// 假设目标博客的访问URL是 your-site.com/my-blog
$targetBlog = Blog::get()->filter('URLSegment', 'my-blog')->first();
if ($targetBlog) {
    $blogId = $targetBlog->ID;
    // 后续用这个ID过滤文章即可
}

需要注意:确保你的BlogPost数据对象确实包含BlogID字段——Silverstripe官方Blog模块默认会自动创建这个关联,如果是自定义的博客结构,需要确认关联关系已正确配置。

内容的提问来源于stack exchange,提问作者Jayne Ion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:07:34