Рейтинг:1

Как добавить новые поля в диалоговое окно «Редактировать медиаданные» при встраивании медиафайлов

флаг cn

Я пытаюсь добавить новое поле выбора в диалоговое окно, которое появляется при выборе «редактировать медиа» на медиафайле, встроенном в WYSIWYG. Я имею в виду диалоговое окно, в котором представлены такие параметры, как «заголовок» и «выравнивание».

Я смог заставить поле появиться с помощью

function mymodule_form_alter (массив и $ форма, FormStateInterface $ form_state, строка $ form_id) {
если($form_id=='editor_media_dialog'){
  $ форма ['размер'] = [
    '#title' => t('Размер'),
    '#тип' => 'выбрать',
    '#варианты' => [
      '' => т('По умолчанию'),
      '-маленький' => т('Маленький'),
      '-средний' => t('Средний'),
      '-большой' => т('Большой'),
    ],
  ];
 }
}

но я все равно не могу сохранить это значение. При сохранении и повторном открытии диалогового окна нет ссылки на новое значение в $form_state.

Каким будет правильный способ добавления полей в диалоговое окно «Редактировать медиа» встроенных медиаобъектов в WYSIWYG?

Рейтинг:1
флаг cn

Эти диалоги работают так:

  • При сохранении формы все внутри атрибуты в состоянии формы добавляется как литеральный HTML-атрибут к <drupal-media> элемент, для которого было запущено модальное окно. Таким образом, данные сохраняются в самой разметке.
  • Когда вы снова загружаете форму, все атрибуты HTML, которые в настоящее время находятся в элементе, передаются в форму, поэтому входные данные могут быть заполнены.

Итак, все, что вам нужно сделать, это:

  1. Поместите элемент формы в атрибуты массив, поэтому он будет применен к разметке автоматически. Вы можете сделать это, установив #родители на элементе.
  2. Установить #значение по умолчанию к тому, который был передан от редактора. Эти значения доступны из пользовательского ввода, а не из значений состояния формы.

Ваш окончательный код может выглядеть так:

$size = $form_state->getUserInput()['editor_object']['атрибуты']['размер'] ?? '';

$ форма ['размер'] = [
  '#title' => t('Размер'),
  '#тип' => 'выбрать',
  '#варианты' => [
    '' => т('По умолчанию'),
    '-маленький' => т('Маленький'),
    '-средний' => t('Средний'),
    '-большой' => т('Большой'),
  ],
  '#parents' => ['атрибуты', 'размер'],
  '#default_value' => $размер,
];
Matt avatar
флаг cn
Спасибо, это сработало отлично! Клайв как всегда полезен

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.