Рейтинг:2

Как получить режим просмотра \ Third_Party_settings поля внутри hook_preprocess_image_formatter(&$variables)

флаг br

Я на Д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 ответ, что я сделал:

  1. Добавлено внутри функции поля предварительной обработки:
    если (!пусто($переменные['элементы'])) {
      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"]);
}
leymannx avatar
флаг ne
Drupal 7, но может быть актуален: https://drupal.stackexchange.com/a/39508/15055
Рейтинг:2
флаг cn

Я бы добавил режим просмотра или сторонние настройки в атрибуты изображения. Тогда он доступен в обоих вложенных шаблонах, image_formatter и изображение. Вы можете удалить его после того, как сохранили его в локальной переменной, если вы не хотите, чтобы атрибут отображался. Но обычно никто не заботится о дополнительном атрибуте.

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

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