循环博客帖子按SilverStripe上的类别过滤

I'm working on a SilverStripe site and have installed the blog module.

I have my blog set up with multiple categories such as News, Events, Announcements, Photo Galleries, etc.

The problem I run into is that I want to showcase the latest blog post (title, image, some of the content) of each category on my front page.

I can easily loop the blog post using this solution: http://www.silverstripe.org/community/forums/blog-module-forum/show/102585?start=8

/mysite/code/Page.php

class Page_Controller extends ContentController {
    public function latestBlog($num = 3) {
        return BlogPost::get()
                ->sort('PublishDate', 'desc')
                ->limit($num);
    }
}

/themes/simple/templates/Page.ss

<ol>
<% loop $latestBlog %>
    <li>$Title</li>
    <p>$Content</p>
<% end_loop %>
</ol>

But I can't figure out how to loop while filtering by a category. For example something like this logic:

return BlogPost::get()
        ->FILTER('Category', 'News')
        ->sort('PublishDate', 'desc')
        ->limit($num);

The idea is to loop News and code it a certain way so it looks different on the front page, then loop Photo Galleries.

I can't find anything that works on how to do this.

Is this possible to do?

You want to use the relation method on DataList: http://api.silverstripe.org/3.3/class-DataList.html#_relation

return BlogCategory::get()
    ->filter('Title', 'News')
    ->relation('BlogPosts')
    ->sort('PublishDate', 'DESC')
    ->limit($num);

This will return a list of blog posts filtered by the defined category (news).