[英]Silverstripe 4.0.4 - getCMSActions not working as expected on dataobject
我正在嘗試在數據對象上的保存和刪除按鈕旁邊添加一個復制數據對象按鈕,但是“ getCMSActions”似乎不起作用。
我遵循了以下頁面上的教程:
但是兩者都沒有解決我的問題,我的代碼當前看起來像這樣。
public function getCMSActions() {
$actions = parent::getCMSActions();
if ($this->ID) {
$actions->push(FormAction::create('copy', _t('SiteBlockAdmin.Copy', 'Copy'))
->setUseButtonTag(true)
->setAttribute('data-icon', 'arrow-circle-double'));
$actions->push(DropdownField::create('BegrotingsPageCopyToID', '', BegrotingsPage::get()->map())
->setEmptyString('Selecteer pagina voor kopie'));
}
return $actions;
}
我要實現的是使復制按鈕和dropdownfield出現在帶有getCMSActions字段的保存和刪除按鈕旁邊。
問題在於GridFieldDetailForm_ItemRequest::getFormActions()
不會調用$this->record->getCMSActions()
,而是將其初始動作列表定義為$actions = new FieldList();
。
我假設您正在通過ModelAdmin管理DataObject。
您可以向此類添加擴展,並以這種方式添加字段(但它不是最優的):
# File: app/_config/extensions.yml
SilverStripe\Forms\GridField\GridFieldDetailForm_ItemRequest:
extensions:
MyExtension: MyExtension
您的擴展名可能如下所示:
<?php
use SilverStripe\Forms\DropdownField;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\FormAction;
use SilverStripe\ORM\DataExtension;
class MyExtension extends DataExtension
{
public function updateFormActions(FieldList $actions)
{
$record = $this->owner->getRecord();
// This extension would run on every GridFieldDetailForm, so ensure you ignore contexts where
// you are managing a DataObject you don't care about
if (!$record instanceof YourDataObject || !$record->exists()) {
return;
}
$actions->push(FormAction::create('copy', _t('SiteBlockAdmin.Copy', 'Copy'))
->setUseButtonTag(true)
->setAttribute('data-icon', 'arrow-circle-double'));
$actions->push(DropdownField::create('BegrotingsPageCopyToID', '', BegrotingsPage::get()->map())
->setEmptyString('Selecteer pagina voor kopie'));
}
}
我還提出了一個問題,以跟進具有誤導性的文檔: https : //github.com/silverstripe/silverstripe-framework/issues/8773
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.