Silverstripe 下拉字段不显示所选的已保存值
Silverstripe drop down field does not show saved value as selected
我在 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;
}
}
问题是,当我 select 一个值和 save/publish 页面时,下拉菜单返回到 "Select one" 而不是显示保存的 selection。
我没有检查数据库以查看是否存储了该值,但我认为它是。
编辑: 不是重复的。
建议的副本涉及从 CMS 中删除字段。
这个问题涉及将下拉值设置为保存的 selection.
答案却大同小异。用户必须始终将 ID 附加到 has_one 字段,以便 CMS 与其交互。
默认情况下,SilverStripe 在将 has_one
关系字段保存到数据库时将 'ID' 参数附加到它们的末尾。
因此,当您覆盖关系字段时,您需要将 'ID' 附加到字段标识符。
DropdownField::create('LinkedProductID', 'Link a Product', Product::get()->map('ID', 'ProductName'));
我在 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;
}
}
问题是,当我 select 一个值和 save/publish 页面时,下拉菜单返回到 "Select one" 而不是显示保存的 selection。
我没有检查数据库以查看是否存储了该值,但我认为它是。
编辑: 不是重复的。 建议的副本涉及从 CMS 中删除字段。 这个问题涉及将下拉值设置为保存的 selection.
答案却大同小异。用户必须始终将 ID 附加到 has_one 字段,以便 CMS 与其交互。
默认情况下,SilverStripe 在将 has_one
关系字段保存到数据库时将 'ID' 参数附加到它们的末尾。
因此,当您覆盖关系字段时,您需要将 'ID' 附加到字段标识符。
DropdownField::create('LinkedProductID', 'Link a Product', Product::get()->map('ID', 'ProductName'));