Silverstripe 4.0.4 - getCMSActions не работает должным образом для объекта данных - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь добавить кнопку копирования объекта данных рядом с кнопкой сохранения и удаления на объекте данных, но, похоже, «getCMSActions» не работает.

Я следовал инструкциям на следующих страницах:

https://docs.silverstripe.org/en/4/developer_guides/customising_the_admin_interface/how_tos/extend_cms_interface/#extending-the-cms-actions

https://docs.silverstripe.org/en/4/developer_guides/customising_the_admin_interface/how_tos/cms_alternating_button/

Но оба не решили мою проблему, мой код в настоящее время выглядит следующим образом.

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;
}

Что яВы хотите, чтобы кнопка копирования и раскрывающееся поле отображались рядом с кнопкой сохранения и удаления с полем getCMSActions.

1 Ответ

0 голосов
/ 31 января 2019

Проблема в том, что GridFieldDetailForm_ItemRequest::getFormActions() не вызывает $this->record->getCMSActions(), вместо этого он определяет свой начальный список действий как $actions = new FieldList();.

Я предполагаю, что вы управляете своим DataObject через ModelAdmin.

Вы можете добавить расширение к этому классу и таким образом добавить поля (но это неоптимально):

# 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...