Php 从给定函数手动创建一个新字段。用户表单插件
我想在默认情况下使用Silverstripe 3.2中的Userforms插件添加一些字段 我想我找到了在Gridfield中按下“Add Field”(添加字段)按钮时添加字段的函数,但我不确定,也不知道如何通过调用一个简单的函数来添加formfield类型(日期输入)。 以下是完整的功能:Php 从给定函数手动创建一个新字段。用户表单插件,php,silverstripe,Php,Silverstripe,我想在默认情况下使用Silverstripe 3.2中的Userforms插件添加一些字段 我想我找到了在Gridfield中按下“Add Field”(添加字段)按钮时添加字段的函数,但我不确定,也不知道如何通过调用一个简单的函数来添加formfield类型(日期输入)。 以下是完整的功能: public function getFieldEditorGrid() { Requirements::javascript(USERFORMS_DIR . '/javascript/Field
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();
}
}
是否在创建用户表单页面时尝试创建默认表单字段?是。我创建了一个新的页面类型,每次创建该页面类型的新页面时,都会自动添加两个字段。所以我想调用一个函数(在创建页面时)来添加这些字段。这正是我需要的。它起作用了。谢谢你的帮助。干杯