Рейтинг:1

Пользовательская функция темы для поля

флаг in

Я хочу изменить хук темы для одного поля из пользовательского FieldFormatter. Обратный вызов #theme — это «поле», но я хочу дать пользователю возможность переключать настройку, которая меняет это значение на «field_raw», которое затем использует шаблон Twig без разметки. Не могу понять зацепку темы.

Шаблон ветки:

{%- для элемента в элементах %}{{ item.content }}{% endfor -%}

Крюк модуля:

функция mymodule_theme ($ существующая, $ тип, $ тема, $ путь) {
  возвращаться [
    'поле_raw' => [
      'предметы' => NULL,
    ],
  ];
}

Я не уверен, что передать здесь, чтобы попасть в шаблон ветки. Я могу вывести текст в шаблон, чтобы знать, что он попал. Какие правильные переменные нужно установить здесь, чтобы шаблон получил их?

Я также пробовал:

'рендерить элемент' => 'элемент'
'рендерить элемент' => 'элементы'
'рендерить элемент' => 'дети'
Рейтинг:1
флаг cn

Использование крюка для полевой базы

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

См. например comment_theme():

/**
 * Реализует hook_theme().
 */
функция comment_theme () {
  возвращаться [
    ... 
    'поле__комментарий' => [
      'базовый крючок' => 'поле',
    ],
  ];
}

В этом случае недостаточно начать имя хука темы с базового хука, ему также нужны двойные символы подчеркивания: field__raw.


Реализация пользовательского хука темы

Не рекомендуется, для демонстрационных целей вы можете скопировать соответствующий код ядра в свой собственный шаблон:

мой модуль.модуль:

функция mymodule_theme ($ существующая, $ тип, $ тема, $ путь) {
  возвращаться [
    'поле_raw' => [
      'рендерить элемент' => 'элемент',
    ],
  ];
}

функция template_preprocess_field_raw(&$variables, $hook) {
  $элемент = $переменные['элемент'];
  $переменные['элементы'] = [];
  $дельта = 0;
  в то время как (! пусто ($ элемент [$ дельта])) {
    $variables['items'][$delta]['content'] = $element[$delta];
    $дельта++;
  }
}

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

Переключитесь на этот шаблон в средстве форматирования настраиваемых полей:

  просмотр общедоступной функции (FieldItemListInterface $items, $langcode = NULL) {
    $elements = parent::view($items, $langcode);
    если (isset($elements['#theme'])) {
      $elements['#theme'] = 'field_raw';
    }
    вернуть $элементы;
  }

И, наконец, поместите минимальный шаблон в папку модуля.

мой модуль/шаблоны/поле-raw.html.twig

{%- для элемента в элементах %}{{ item.content }}{% endfor -%}

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

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