首页 > 解决方案 > 在自定义页面模板上显示最新的博客文章

问题描述

我需要一些帮助将此代码从 SS3 转换为 SS4。我使用下面的代码将我最新的博客文章拉到我的自定义主页模板中。这在 SS4 中不再适用于我。不知道需要添加什么来修复它。

class IndexPageController extends PageController {
public function LatestPostsHome()
    {
        return BlogCategory::get()
        ->filter('Title', 'Featured')
        ->relation('BlogPosts')
        ->sort('PublishDate', 'DESC');
    }
}

感谢,

标签: phpsilverstripesilverstripe-4

解决方案


您是否有多个具有相同标题的 BlogCategories?

如果您只有一个标题为“精选”的 BlogCategory,那么这应该可以:

public function LatestPostsHome()
    {
        $blogCategory = BlogCategory::get()->filter('Title', 'Featured')->first();
        if (!$blogCategory) {
            return null;
        }
        // Get the corresponding has_many/many_many objects.
        $blogPosts = $blogCategory->BlogPosts()->sort('PublishDate', 'DESC');

        return $blogPosts;
    }

如果您有多个具有相同标题的类别,那么您可以使用以下内容:

public function LatestPostsHome()
{
    $blogCategories = BlogCategory::get()->filter('Title', 'Featured');

    if (!$blogCategories->exists()) {
        return null;
    }

    // Option 1 (not tested)
    $categoryIDs = $blogCategories->column('ID');
    $blogPosts = BlogPost::get()->byIDs($categoryIDs);

    return $blogPosts;


    // Option 2 (not tested)
    $blogPosts = new \SilverStripe\ORM\ArrayList();
    foreach ($blogCategories as $category) {
        $posts = $category->BlogPosts();
        $blogPosts->push($posts->toNestedArray());
    }

    return $blogPosts;
}

推荐阅读