sunnychomeup/hasoneedit

允许在CMS中直接编辑has_one对象的字段

安装: 27

依赖者: 0

建议者: 0

安全: 0

星星: 0

观察者: 2

分支: 13

类型:silverstripe-vendormodule

3.0.2 2023-10-18 05:08 UTC

This package is auto-updated.

Last update: 2024-09-19 04:07:59 UTC


README

此模块允许您直接编辑相关has_one对象的字段,无需在GridFieldModelAdmin的链接中麻烦。如果相关的has_one尚未存在,则此模块还会在首次写入时为您创建对象并设置关系。

此模块已在GridFieldDetailFormCMSMain中的通用Page中测试了编辑has_one

要求

SilverStripe 4.x。

已在4.0.x-dev上进行了基本测试。随着SS4变得更加稳定,可能需要进行广泛的测试。

使用方法

要使用此模块,只需在getCMSFields()方法中将字段添加到对象的CMS字段中。字段的名称应该是HasOneName-_1_-FieldName

例如,假设您有一个名为Showhas_one,该has_one有一个名为Title的字段您想要编辑。您会添加字段TextField::create('Show-_1_-Title', 'Show Title')

如果您不需要输出的字段名称与您提供的值匹配,您也可以使用冒号作为分隔符而不是-_1_-

使用ProvidesHasOneInlineFields特性生成字段

如果您只想显示相关对象的全部CMS字段,您可以将ProvidesHasOneInlineFields特性添加到对象中。这将为您的DataObject添加一个方法,该方法调用getCMSFields()并返回该对象的FormField。这些FormField将被转换为与此模块一起使用,通过添加关系名称和分隔符到它们的名称。

在拥有对象的地方,您想在其中显示字段,调用HasOneEdit::getInlineFields($this, 'my_has_one_name', ['db'])。这将返回添加到CMS的db子集字段 - 例如,您可以通过调用$fields->addFieldsToTab('Root.RelatedObject', HasOneEdit::getInlineFields($this, 'Relation', ['db']))来显示相关对象的字段在其自己的选项卡中。

这有一个优点,即运行整个getCMSFields()调用树(例如,任何通过扩展提供的功能的updateCMSFields)等,而无需在许多地方重复逻辑。

您还可以实现一个返回FieldList|FormField[]public function provideHasOneInlineFields($relationName)方法,以提供与getCMSFields()不同的自定义接口(例如,只是字段的一小部分)。在这种情况下,所有字段名称都应采用以下形式:$relationName . HasOneEdit::FIELD_SEPARATOR . $dataObjectFieldName。即使您的类不使用ProvidesHasOneInlineFields特性,此方法也会被HasOneEdit::getInlineFields调用。

与您自己的表单一起使用

要为您的表单添加支持,您需要将Sunnysideup\HasOneEdit\UpdateFormExtension扩展添加到您的控制器中,并在返回表单到模板之前调用$this->extend('updateEditForm', $form)。如果没有这个,虽然保存将工作,但字段将不会用has_one的值填充。