【发布时间】:2017-11-28 23:02:49
【问题描述】:
我的网站中有多个处于归档状态的页面,但看不到 Silverstripe 使用什么来确定页面处于归档状态。
是否有一个函数可以用来确定页面是否处于归档状态,例如
foreach (SiteTree::get() as $page) {
echo $page->isArchived();
}
或者我可以查询的某种属性以返回所有存档页面?
【问题讨论】:
标签: php silverstripe
我的网站中有多个处于归档状态的页面,但看不到 Silverstripe 使用什么来确定页面处于归档状态。
是否有一个函数可以用来确定页面是否处于归档状态,例如
foreach (SiteTree::get() as $page) {
echo $page->isArchived();
}
或者我可以查询的某种属性以返回所有存档页面?
【问题讨论】:
标签: php silverstripe
您可以使用回调来过滤掉已归档的页面,如下所示:
$allPages = Versioned::get_including_deleted('SiteTree');
$deletedPages = $allPages->filterByCallback(function($page) {
// Doesn't exist on either stage or live
return $page->getIsDeletedFromStage() && !$page->getExistsOnLive();
});
上面的代码正是 CMS 中的过滤器所做的(例如,当您过滤归档页面时)
我想它也可以通过数据库查询来实现,但它不会是对字段的简单检查,而是很可能是由多个子查询组成的查询。
【讨论】:
Versioned过滤吗?
SiteTree::get 不会删掉它……我改变了答案