2017-11-28 9 views
2

私のサイトには、アーカイブされた状態のいくつかのページがありますが、Silverstripeがページがアーカイブされた状態であることを確認するために何が使用されているかわかりません。アーカイブされたページのSiteTreeのクエリ

は、私は、ページがアーカイブされた状態にあるかどうかを判断するために使用できる機能は、

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

または私はすべてのアーカイブページを返すようにすることにより照会することができる属性のいくつかの並べ替えのようなものはありますか?

答えて

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でのフィルタはまったく同じものです(たとえば、あなたがアーカイブされたページをフィルタリングする場合。)

DBクエリでも実行できると思いますが、フィールドの単純なチェックではなく、複数のサブクエリからなるクエリである可能性があります。

+0

まず、 'Versioned'フィルタリングを無効にする必要がありますか? – wmk

+1

@wmkあなたはもちろん正しいです... 'SiteTree :: get'はそれをカットしません...私は答えを変更しました – bummzack

関連する問題