如何过滤SiteTree
页面的结果,以便只获得ClassName为ProductPage
的页面?
以下是代码的相关部分 -
static $has_one = array('ProductLinkPagesID' => 'SiteTree');
在这里
$ProductLinkPages = new TreeDropdownField('ProductLinkPagesID', 'Related Products Link', 'SiteTree');
答案 0 :(得分:3)
如果你真的想保留树结构,但只允许人们选择'ProductPage'页面,你可以使用TreeDropdownField并禁用所有其他节点:http://api.silverstripe.org/3.1/class-TreeDropdownField.html#_setDisableFunction。
$tree->setDisableFunction(function($item) {
return ( ! $item instanceof ProductPage);
});
答案 1 :(得分:3)
因为需要的结果来自SiteTree页面,但只有一种类型的页面 - ProductPage,使用DropdownField
在这里与ProductPage::get()->map()
一起更好 -
$ProductLinkPages = DropdownField::create('ProductLinkPagesID', 'Related Products Link', ProductPage::get()->map());
感谢user4694959
答案 2 :(得分:1)
如果树被过滤,TreeDropdownField无法呈现树。
您需要使用vanilla DropdownField - 或其他解决方案,如果您发现通过下拉列表拖网数字太大的问题。虽然默认情况下CMS使用jquery.chozen来帮助解决这个问题。