在SilverStripe 3.1中过滤SiteTree TreeDropdownField()

时间:2015-03-20 16:34:55

标签: silverstripe

如何过滤SiteTree页面的结果,以便只获得ClassName为ProductPage的页面?

以下是代码的相关部分 -

static $has_one = array('ProductLinkPagesID' => 'SiteTree');

在这里

$ProductLinkPages = new TreeDropdownField('ProductLinkPagesID', 'Related Products Link', 'SiteTree');

3 个答案:

答案 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来帮助解决这个问题。