Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从给定函数手动创建一个新字段。用户表单插件_Php_Silverstripe - Fatal编程技术网

Php 从给定函数手动创建一个新字段。用户表单插件

Php 从给定函数手动创建一个新字段。用户表单插件,php,silverstripe,Php,Silverstripe,我想在默认情况下使用Silverstripe 3.2中的Userforms插件添加一些字段 我想我找到了在Gridfield中按下“Add Field”(添加字段)按钮时添加字段的函数,但我不确定,也不知道如何通过调用一个简单的函数来添加formfield类型(日期输入)。 以下是完整的功能: public function getFieldEditorGrid() { Requirements::javascript(USERFORMS_DIR . '/javascript/Field

我想在默认情况下使用Silverstripe 3.2中的Userforms插件添加一些字段 我想我找到了在Gridfield中按下“Add Field”(添加字段)按钮时添加字段的函数,但我不确定,也不知道如何通过调用一个简单的函数来添加formfield类型(日期输入)。 以下是完整的功能:

public function getFieldEditorGrid() {
    Requirements::javascript(USERFORMS_DIR . '/javascript/FieldEditor.js');

    $fields = $this->owner->Fields();

    $this->createInitialFormStep(true);
    $editableColumns = new GridFieldEditableColumns();
    $fieldClasses = singleton('EditableFormField')->getEditableFieldClasses();
    $editableColumns->setDisplayFields(array(
        'ClassName' => function($record, $column, $grid) use ($fieldClasses) {
            if($record instanceof EditableFormField) {
                return $record->getInlineClassnameField($column, $fieldClasses);
            }
        },
        'Title' => function($record, $column, $grid) {
            if($record instanceof EditableFormField) {
                return $record->getInlineTitleField($column);
            }
        }
    ));

    $config = GridFieldConfig::create()
        ->addComponents(
            $editableColumns,
            new GridFieldButtonRow(),
            GridFieldAddClassesButton::create('EditableTextField')
                ->setButtonName(_t('UserFormFieldEditorExtension.ADD_FIELD', 'Add Field'))
                ->setButtonClass('ss-ui-action-constructive'),
            GridFieldAddClassesButton::create('EditableFormStep')
                ->setButtonName(_t('UserFormFieldEditorExtension.ADD_PAGE_BREAK', 'Add Page Break')),
            GridFieldAddClassesButton::create(array('EditableFieldGroup', 'EditableFieldGroupEnd'))
                ->setButtonName(_t('UserFormFieldEditorExtension.ADD_FIELD_GROUP', 'Add Field Group')),
            new GridFieldEditButton(),
            new GridFieldDeleteAction(),
            new GridFieldToolbarHeader(),
            new GridFieldOrderableRows('Sort'),
            new GridFieldDetailForm()
        );

    $fieldEditor = GridField::create(
        'Fields',
        _t('UserDefinedForm.FIELDS', 'Fields'),
        $fields,
        $config
    )->addExtraClass('uf-field-editor');

    return $fieldEditor;
}

第一次保存页面后,我们可以调用
onAfterWrite
来设置默认字段

class CustomFormPage extends UserDefinedForm {

    public function onAfterWrite() {

        if (!$this->Fields() || !$this->Fields()->exists()) {

            $nameField = new EditableTextField();
            $nameField->Name = 'Name';
            $nameField->Title = 'Name';
            $nameField->ParentID = $this->ID;
            $nameField->Required = true;
            $nameField->CustomErrorMessage = 'Please enter your name.';
            $nameField->write();

            $dateField = new EditableDateField();
            $dateField->Name = 'Date';
            $dateField->Title = 'Date';
            $dateField->ParentID = $this->ID;
            $dateField->Required = true;
            $dateField->CustomErrorMessage = 'Please enter this date.';
            $dateField->write();
        }
        parent::onAfterWrite();
    }

}

是否在创建用户表单页面时尝试创建默认表单字段?是。我创建了一个新的页面类型,每次创建该页面类型的新页面时,都会自动添加两个字段。所以我想调用一个函数(在创建页面时)来添加这些字段。这正是我需要的。它起作用了。谢谢你的帮助。干杯