gpt4 book ai didi

silverstripe - 使用 GridFieldDetailForm 修改字段时获取当前记录

转载 作者:行者123 更新时间:2023-12-03 09:20:23 25 4
gpt4 key购买 nike

首先,我使用的是 SilverStripe 3.2 RC1。

如果您单击网格字段项,我需要修改它的显示字段。为了实现此目的,我正在修改“GridFieldDetailForm”字段,如下所示

$bundleGridForm = $bundleGridConfig->getComponentByType('GridFieldDetailForm');

$detailFormFields = FieldList::create(
TabSet::create(
'Root',
Tab::create(
'Haupt-Inhalt',
CheckboxSetField::create(
'ManyMany[AvailableVariations]',
'Verfügbare Variationen',
$HELP-NEEDED-HERE->VariationItems()->map()->toArray()
)
)
)
);

$bundleGridForm->setFields($detailFormFields);

如您所见,我只想显示一个 CheckboxSetField 并作为源 $HELP-NEEDED-HERE->VariationItems()->map()->toArray() I'我想使用当前选定/单击项目的关系 (VariationItems)。

问题是我不知道如何获得这种关系,因为 $this 当然引用了我的网格字段所在的类,而不是单击的项目。

也许 handleItem()函数是我所需要的,因为它返回 GridFieldDetailForm_ItemRequest我可以在其中调用 getRecord() 的类(class)功能。但所有这一切都假设我从 gridfield 获取使用 handleItem() 函数的请求,并且我绝对不知道如何获取此记录。

如果有任何帮助,我将非常感激。

最诚挚的问候

最佳答案

回答我自己的问题以及也被困在这里的任何人:

$bundleGridConfig
->removeComponentsByType('GridFieldAddNewButton');

$bundleGridForm = $bundleGridConfig->getComponentByType('GridFieldDetailForm');
// reset all fields, either you'r just adding new fields below
$bundleGridForm->setFields(FieldList::create());
$bundleGridForm->setItemEditFormCallback(function($form) {
$record = $form->getRecord();

// get the saved values
$availableVariations = $this->Items()->getExtraData('AvailableVariations', $record->ID);

$form->Fields()->push(
CheckboxSetField::create(
'VariationList',
'Verfügbare Variationen',
$record->VariationItems(),
// use the saved values as preset
explode(',', $availableVariations['AvailableVariations'])
)
);

// workaround for https://github.com/silverstripe/silverstripe-framework/issues/4067
$form->Fields()->push(
HiddenField::create('ManyMany[AvailableVariations]', 'Verfügbare Variationen', $availableVariations['AvailableVariations'])
);
});

问题是有一个bug ,这会阻止 CheckboxSetFields 写入数据库。作为一种快速解决方法,我的 CheckboxSetField 只是一个用于显示复选框的“伪字段”,而用于将所选选项保存到数据库的字段是一个 HiddenField。

现在您所要做的就是将所选选项解析为字符串,并在 CheckboxSetField 发生任何更改时将此字符串插入到隐藏字段中。

关于silverstripe - 使用 GridFieldDetailForm 修改字段时获取当前记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32821832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com