Silverstripe下拉字段未显示已选择的已保存值

时间:2018-01-03 17:39:42

标签: silverstripe silverstripe-4

我在CMS中创建了一个下拉字段,如下所示:

class ProductPage extends Page {
    //.....

    private static $has_one = [
        'TeaserImage'=>Image::Class,
        'LinkedProduct'=>'Product'
    ];

    public function getCMSFields(){
        $fields = parent::getCMSFields();

        $productLinkField = DropdownField::create('LinkedProduct', 'Link a Product', Product::get()->map('ID', 'ProductName'));
        $productLinkField->setEmptyString('(Select one)');

        $fields->addFieldToTab('Root.Main', $productLinkField, 'Content');

        return $fields;
    }
}

问题在于,当我选择一个值并保存/发布页面时,下拉菜单会返回“选择一个”而不是显示已保存的选项。

我没有检查数据库以查看是否存储了值,但我认为是。

编辑:不重复。 建议的副本涉及从CMS中删除字段。 此问题涉及将下拉值设置为已保存的选择。

然而答案是相似的。用户必须始终将ID附加到has_one字段,以便CMS与其进行交互。

1 个答案:

答案 0 :(得分:1)

默认情况下,SilverStripe会将{ID'参数附加到has_one关系字段末尾,并将其保存在数据库中。

因此,当您覆盖关系字段时,您需要将“ID”附加到字段标识符。

DropdownField::create('LinkedProductID', 'Link a Product', Product::get()->map('ID', 'ProductName'));