SIlverStripe PHP - “添加新内容”或选择下拉列表中的现有内容

时间:2016-09-15 11:05:38

标签: php silverstripe

这应该相对简单。我知道如何创建表单并隐藏它并在选择特定的option时显示它

我希望Dropdown填充特定的DataObject。这很简单。但我需要添加一个选项,向此Dropdown添加“添加新内容”,其格式为

我可以处理提交(例如,如果值类似于'new'而不是ID),但我不知道如何将此选项添加到select {{1}或者,如果它是可能的。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:3)

您可以使用DropdownField并使用您想要的任何键值对填充它。例如:

$itemsField = DropdownField::create(
    'Items',
    'Items',
    ['add-new' => 'Add new'] + $this->Items()->map()->toArray()
);

第三个参数是一个数组,它被转换为下拉列表的option html元素。

然后,您可以将其添加到表单FieldList

$form = Form::create(
    $this, 
    'MyForm', 
    FieldList::create(
        [
            $someField,
            $someOtherField,
            $itemsField
        ]
    ), 
    $actions, 
    $requiredFields
);

http://api.silverstripe.org/3.1/class-DropdownField.html

答案 1 :(得分:1)

选择$has_one的下拉菜单很好。例如。如果您有Addresses列表并想要选择Country

有时必须添加新的Country。为此,我使用quickaddnew extension添加了一个很好的按钮"添加新的"在下拉列表下方,打开一个用于添加新项目的模式中的表单。您可以在代码中使用它,如下所示:

public function getCMSFields() {
    /**
     * @FieldList
     */
    $fields =  parent::getCMSFields();

    $countries = function() {
        return Country::get()->map('ID','Title')->toArray();
    };

    $country = new DropdownField('CountryID', 'Country', $countries());
    $country->setEmptyString('-- please select --');
    $country->useAddNew('Country', $countries);
    $fields->insertAfter($country, 'Telephone');

    $fields->removeByName('SortOrder');

    return $fields;