Я на Д9.
Я добавил пользовательскую опцию в средство форматирования поля изображения после Правила Друпала
В предварительной обработке поля я могу получить настройки, которые я создал:
функция my_module_preprocess_field(&$variables) {
if ($variables["элемент"]["#formatter"] === 'изображение') {
$entity = $variables['элемент']['#объект'];
$view_mode = $variables['element']['#view_mode'];
$field_name = $variables['element']['#field_name'];
$entity_display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
$field_display = $entity_display->getComponent($field_name);
$variables['my_settings'] = isset($field_display["first_party_settings"]["my_module"]["my_settings"]) && $field_display["first_party_settings"]["my_module"]["my_settings"];
}
}
Однако поле.html.twig
файл не подходит для моих нужд: я должен передать эти настройки в image-formatter.html.twig
файл, потому что мне нужно разместить див
сразу после изображение
тег, а не за пределами а
.
К сожалению, я не могу получить эту информацию в предварительной обработке средства форматирования изображений, потому что я не могу найти способ получить режим просмотра:
функция my_module_preprocess_image_formatter(&$variables) {
$item = $переменные['item'];
$entity = $item->getEntity();
$field = $item->getFieldDefinition();
//что делать, как получить view_mode\the Third_Party_settings?
$entity_display = EntityViewDisplay::collectRenderDisplay($entity, $missing_view_mode);
}
Это возможно?
РЕДАКТИРОВАТЬ:
Спасибо 4k4 ответ, что я сделал:
- Добавлено внутри функции поля предварительной обработки:
если (!пусто($переменные['элементы'])) {
foreach ($variables['items'] as &$item) {
$item['content']['#item_attributes']['my_settings'] = $my_settings;
}
}
А затем добавил функция предварительной обработки изображения чтобы эта информация была переменной, а не атрибутом - скорее предпочтение, чем строгая необходимость.
функция my_module_preprocess_image(&$variables) {
$variables['my_settings'] = $variables["атрибуты"]["my_settings"] ?? ЛОЖНЫЙ;
unset($variables["атрибуты"]["my_settings"]);
}