Silverstripe - 博客 post 订购
Silverstripe - Blog post ordering
以为这会很容易,但我似乎正在努力解决这个问题。
Silverstripe 博客如何对其 post 进行排序?我想将一个特定的博客 post 固定到列表的顶部,所以我创建了一个 SortOrder 字段并将其赋值为 1。尝试按 SortOrder 排序,然后按 PublishDate 排序,但似乎只按 PublishDate 排序时间.
即使在博客模型上更改此设置也无济于事:
private static $default_sort = '"PublishDate" IS NULL DESC, "PublishDate" DESC' ;
更新 BlogPost
的 default_sort
应该有效:
# In your config.yml
BlogPost:
default_sort: 'Sticky DESC, PublishDate DESC'
extensions:
- MyBlogPostExtension
扩展 BlogPost 以添加 Sticky
布尔值(也可以是 Int
):
class MyBlogPostExtension extends DataExtension
{
private static $db = [
'Sticky' => 'Boolean'
];
public function updateCMSFields(FieldList $fields)
{
$stickyField = CheckboxField::create(
'Sticky',
'Sticky this blogpost'
);
$fields->addFieldToTab(
'Root.Main',
$stickyField
);
}
}
确保您想要粘贴的 BlogPost
已发布且 Sticky
设置为 true。
我在博客、排序和伐木工人(Post 在 GridField 中,而不是在 Sitetree 中)有点挣扎。我使用 heyday/silverstripe-gridfieldversionedorderablerows 手动排序。
Injector:
GridFieldConfig_BlogPost:
class: GridFieldConfig_MyBlogPost
<?php
class GridFieldConfig_MyBlogPost extends GridFieldConfig_BlogPost
{
public function __construct($itemsPerPage = null)
{
parent::__construct($itemsPerPage);
$this->addComponent(new GridFieldVersionedOrderableRows('Sort'));
$this->getComponentByType("GridFieldPaginator")->setItemsPerPage(100);
$this->getComponentByType("GridFieldDataColumns")->setDisplayFields(array(
"BlogThumbnail" => "Thumbnail",
"Title" => "Title"
));
}
}
我在 Blog 的 DataExtension 上制作了自己的 PaginatedListSorted,但您可能可以按照 Janne Klouman 的建议按照 yml 设置排序。
以为这会很容易,但我似乎正在努力解决这个问题。
Silverstripe 博客如何对其 post 进行排序?我想将一个特定的博客 post 固定到列表的顶部,所以我创建了一个 SortOrder 字段并将其赋值为 1。尝试按 SortOrder 排序,然后按 PublishDate 排序,但似乎只按 PublishDate 排序时间.
即使在博客模型上更改此设置也无济于事:
private static $default_sort = '"PublishDate" IS NULL DESC, "PublishDate" DESC' ;
更新 BlogPost
的 default_sort
应该有效:
# In your config.yml
BlogPost:
default_sort: 'Sticky DESC, PublishDate DESC'
extensions:
- MyBlogPostExtension
扩展 BlogPost 以添加 Sticky
布尔值(也可以是 Int
):
class MyBlogPostExtension extends DataExtension
{
private static $db = [
'Sticky' => 'Boolean'
];
public function updateCMSFields(FieldList $fields)
{
$stickyField = CheckboxField::create(
'Sticky',
'Sticky this blogpost'
);
$fields->addFieldToTab(
'Root.Main',
$stickyField
);
}
}
确保您想要粘贴的 BlogPost
已发布且 Sticky
设置为 true。
我在博客、排序和伐木工人(Post 在 GridField 中,而不是在 Sitetree 中)有点挣扎。我使用 heyday/silverstripe-gridfieldversionedorderablerows 手动排序。
Injector:
GridFieldConfig_BlogPost:
class: GridFieldConfig_MyBlogPost
<?php
class GridFieldConfig_MyBlogPost extends GridFieldConfig_BlogPost
{
public function __construct($itemsPerPage = null)
{
parent::__construct($itemsPerPage);
$this->addComponent(new GridFieldVersionedOrderableRows('Sort'));
$this->getComponentByType("GridFieldPaginator")->setItemsPerPage(100);
$this->getComponentByType("GridFieldDataColumns")->setDisplayFields(array(
"BlogThumbnail" => "Thumbnail",
"Title" => "Title"
));
}
}
我在 Blog 的 DataExtension 上制作了自己的 PaginatedListSorted,但您可能可以按照 Janne Klouman 的建议按照 yml 设置排序。