0

我在 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 与之交互。

4

1 回答 1

1

默认情况下,SilverStripehas_one在将它们保存在数据库中时会在关系字段的末尾附加一个“ID”参数。

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

DropdownField::create('LinkedProductID', 'Link a Product', Product::get()->map('ID', 'ProductName'));
于 2018-01-08T02:15:29.767 回答