首先,我使用的是 SilverStripe 3.2 RC1。
\n\n如果您单击网格字段项,我需要修改它的显示字段。为了实现此目的,我正在修改“GridFieldDetailForm”字段,如下所示
\n\n$bundleGridForm = $bundleGridConfig->getComponentByType(\'GridFieldDetailForm\');\n\n$detailFormFields = FieldList::create(\n TabSet::create(\n \'Root\',\n Tab::create(\n \'Haupt-Inhalt\',\n CheckboxSetField::create(\n \'ManyMany[AvailableVariations]\',\n \'Verf\xc3\xbcgbare Variationen\',\n $HELP-NEEDED-HERE->VariationItems()->map()->toArray()\n )\n )\n )\n);\n\n$bundleGridForm->setFields($detailFormFields);\nRun Code Online (Sandbox Code Playgroud)\n\n正如您所看到的,我只想显示一个 CheckboxSetField 并且作为源,$HELP-NEEDED-HERE->VariationItems()->map()->toArray()我想使用当前选定/单击的项目的关系 (VariationItems)。
问题是我不知道如何获得这种关系,因为 $this 当然引用了我的网格字段所在的类,而不是单击的项目。
\n\n也许handleItem()函数是我所需要的,因为它返回GridFieldDetailForm_ItemRequest类,我可以在其中调用getRecord()函数。但所有这一切都假设我从网格字段中获取使用handleItem()函数的请求,并且我绝对不知道如何获取该记录。
\n\n对于任何帮助,我将非常感激。
\n\n此致
\n回答我自己的问题以及也被困在这里的任何人:
\n\n$bundleGridConfig\n ->removeComponentsByType(\'GridFieldAddNewButton\');\n\n$bundleGridForm = $bundleGridConfig->getComponentByType(\'GridFieldDetailForm\');\n// reset all fields, either you\'r just adding new fields below\n$bundleGridForm->setFields(FieldList::create());\n$bundleGridForm->setItemEditFormCallback(function($form) {\n $record = $form->getRecord();\n\n // get the saved values \n $availableVariations = $this->Items()->getExtraData(\'AvailableVariations\', $record->ID);\n\n $form->Fields()->push(\n CheckboxSetField::create(\n \'VariationList\',\n \'Verf\xc3\xbcgbare Variationen\',\n $record->VariationItems(),\n // use the saved values as preset\n explode(\',\', $availableVariations[\'AvailableVariations\'])\n )\n );\n\n // workaround for https://github.com/silverstripe/silverstripe-framework/issues/4067\n $form->Fields()->push(\n HiddenField::create(\'ManyMany[AvailableVariations]\', \'Verf\xc3\xbcgbare Variationen\', $availableVariations[\'AvailableVariations\'])\n );\n});\nRun Code Online (Sandbox Code Playgroud)\n\n问题是有一个bug,它阻止了 CheckboxSetFields 写入数据库。作为一种快速解决方法,我的 CheckboxSetField 只是一个用于显示复选框的“伪字段”,而用于将所选选项保存到数据库的字段是一个 HiddenField。
\n\n现在您所要做的就是将所选选项解析为字符串,并在 CheckboxSetField 发生任何更改时将此字符串插入到隐藏字段中。
\n| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |