php - 在自定义页面模板上显示最新的博客文章
问题描述
我需要一些帮助将此代码从 SS3 转换为 SS4。我使用下面的代码将我最新的博客文章拉到我的自定义主页模板中。这在 SS4 中不再适用于我。不知道需要添加什么来修复它。
class IndexPageController extends PageController {
public function LatestPostsHome()
{
return BlogCategory::get()
->filter('Title', 'Featured')
->relation('BlogPosts')
->sort('PublishDate', 'DESC');
}
}
感谢,
解决方案
您是否有多个具有相同标题的 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;
}
推荐阅读
- python - 如何使用 pyodbc 从 SSMS 接收控制台消息,例如在 python 中打印''语句
- javascript - SCRIPT438:SCRIPT438:对象不支持属性或方法“组件”
- java - 有没有办法使用 selenium webdriver 自动通过世界不同地区的页面
- mysql - Nodejs:不能使用'in'运算符在null中搜索'typeCast'
- javascript - 如何在我的 Angular 应用程序中将表情符号映射到数值?
- rxjs - 反应式扩展运算符 SkipLast 是如何工作的?
- unix - 从 Unix 文本文件中删除分隔符
- caching - Infinispan - 集群中节点之间的同步
- javascript - 使用 PHP 数组创建 JQcloud
- google-apps-script - 仅在一个特定工作表中完成更改时发送邮件