【问题标题】:Query SiteTree for archived pages查询已归档页面的 SiteTree
【发布时间】:2017-11-28 23:02:49
【问题描述】:

我的网站中有多个处于归档状态的页面,但看不到 Silverstripe 使用什么来确定页面处于归档状态。

是否有一个函数可以用来确定页面是否处于归档状态,例如

foreach (SiteTree::get() as $page) {
    echo $page->isArchived();
}

或者我可以查询的某种属性以返回所有存档页面?

【问题讨论】:

    标签: php silverstripe


    【解决方案1】:

    您可以使用回调来过滤掉已归档的页面,如下所示:

    $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过滤吗?
    • @wmk 你当然是对的……SiteTree::get 不会删掉它……我改变了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2017-09-07
    • 2017-09-23
    相关资源
    最近更新 更多