Silverstripe 4.0.4 - getCMSActions не работает должным образом для объекта данных

Текстовый файл преобразует символ C '\n' в родную строку, заканчивающуюся на выходе, и преобразует собственную строку, заканчивающуюся на входе, в один '\n'.

Чтобы получить требуемый результат, вам нужно будет изменить stdout в поток двоичных файлов.

Частичный ответ найден здесь здесь . Если у вас есть библиотека, совместимая с C99, использование:

if (freopen(0, "wb", stdout) == 0)
    ...oops...operation failed...

попытается изменить стандартный вывод на двоичный поток. Однако в Windows может возникнуть проблема с библиотекой, совместимой с C99. Номинально это переносимый (поскольку стандартный) ответ. Вероятно, для выполнения одной и той же работы существует функция, специфичная для Windows.

1
задан Remco Hendriks 18 January 2019 в 09:38
поделиться

1 ответ

Проблема в том, что 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'));
    }
}
[1110 ] Я также поднял вопрос о том, чтобы следить за вводящей в заблуждение документацией: https://github.com/silverstripe/silverstripe-framework/issues/8773

0
ответ дан Robbie Averill 18 January 2019 в 09:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: