Проблема в том, что GridFieldDetailForm_ItemRequest::getFormActions()
не вызывает $this->record->getCMSActions()
, вместо этого он определяет свой начальный список действий как $actions = new FieldList();
.
Я предполагаю, что вы управляете своим DataObject через ModelAdmin.
Вы можете добавить расширение к этому классу и добавить поля таким образом (но это неоптимально):
# File: app/_config/extensions.yml
SilverStripe\Forms\GridField\GridFieldDetailForm_ItemRequest:
extensions:
MyExtension: MyExtension
И ваше расширение может выглядеть так:
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'));
}
}
[1110 ] Я также поднял вопрос о том, чтобы следить за вводящей в заблуждение документацией: https://github.com/silverstripe/silverstripe-framework/issues/8773
Проверьте исходный код Deskbar - они делают это; afaik, они вызывают библиотеку C, которая взаимодействует с X11, чтобы сделать задание
Существует python-keybinder, который представляет собой тот же код, но упакован отдельно. Также теперь доступен в репозиториях debian и ubuntu.