Рейтинг:0

Хук для поля не срабатывает при использовании дельты в шаблоне

флаг ie

Я попытался перехватить поле типа ссылки с именем машины «field_link». Это поле отображается в шаблоне с использованием дельта-индекса для извлечения некоторых значений, например:

{{ content.field_link[0]['#title'] }}

Я заметил, что когда я использую content.field_link[0] или же content.field_link.0 мой крючок HOOK_preprocess_field__field_link(&$vars, $hook) не срабатывает. Но как только я использую content.field_link крючки работают.

Есть ли какой-то обходной путь или использование дельт для извлечения значений некоторых полей не является лучшей практикой?

Спасибо

Kevin avatar
флаг in
Это массивы рендеринга. Первый пример печатает значение, а второй запускает функцию рендеринга для создания выходных данных. Поэтому. Если вам нужно что-то отличное от значения по умолчанию, вы должны либо использовать средство форматирования поля, либо предварительно обработать новые переменные для шаблона.
Рейтинг:1
флаг in

Хук предварительной обработки поля работает только при рендеринге поле. Как только вы начинаете извлекать значения из объекта поля (например, отдельные свойства или определенные дельты), вы больше не визуализируете само поле, поэтому не запускаете хук.

Я также не рекомендую извлекать и отображать данные таким образом, потому что вы теряете некоторые метаданные, которые поставляются с этими объектами (например, возможность кэширования, информацию о теме, информацию о форматировании, модификации из других модулей и т. д.). Ты мог бы:

  • Создайте средство форматирования поля для этого типа поля и отображать только определенную дельту (путем переопределения видЭлементы() и добавляя только определенные дельты). Вы можете настроить дельту.
  • Или комбинация hook_field_formatter_ Third_Party_settings_form и hook_preprocess_field. Первый позволит вам сохранить конфигурацию в конфигурации отображения поля, а второй позволит вам выбрать эту конфигурацию и изменить выходные данные поля.
    • Хороший пример этой комбинации (хотя и для другой цели) можно найти в Заборы модуль.

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

Patrick Star avatar
флаг ie
Я использую дельты для извлечения значений и избавления от вложенных шаблонов Drupal, потому что большую часть времени я делаю свои собственные. Но, как я вижу, это не лучшая идея. В настоящее время моя проблема заключается в том, что я создал настраиваемое поле виджета для ссылки и хочу получить некоторые дополнительные значения из этого виджета в свой шаблон. Спасибо за ваш ответ.

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

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