stevie-mayhew/hasoneedit

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

安装次数: 122,673

依赖项: 12

建议者: 0

安全: 0

星标: 21

关注者: 6

分支: 13

开放问题: 6

类型:silverstripe-vendormodule

2.3.0 2024-02-06 19:29 UTC

This package is auto-updated.

Last update: 2024-09-07 01:24:15 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 标题')

如果您不需要输出的字段名称与您提供的值匹配,您也可以使用冒号作为分隔符而不是 -_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 为任何通过扩展提供的功能)等优势,而无需在许多地方重复逻辑。

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

与您的表单一起使用

要为您的表单添加支持,您需要将 SGN\HasOneEdit\UpdateFormExtension 扩展添加到控制器中,并在将表单返回到模板之前调用 $this->extend('updateEditForm', $form)。否则,字段将不会用 has_one 的值填充,尽管保存将正常工作。