В настоящее время я пытаюсь реализовать поле изображения, на которое ссылаются узлы, на моем сайте Drupal 7, который изменит свой «режим просмотра» в зависимости от программной логики непосредственно перед рендерингом. В настоящее время поле отображается в нескольких типах содержимого с помощью настроек режима отображения, каждый из которых использует средство форматирования поля «Узел визуализации».
Первая попытка
Моей первой идеей было реализовать следующее, учитывая, что ловушка - это ловушка и есть ловушка:
function HOOK_field_formatter_view( $entity_type, $entity, $field ... ){
switch ($display['type']) {
case 'node_reference_node':
/* Programatical logic here to modfy field render settings */
break;
}
}
Очевидно, меняя HOOK на имя моего модуля.
Это на самом деле не имеет значения , если выше будет стрелять до или после исходной функции node_reference_field_formatter_view
в node_reference.module
потому , что я либо переопределить его вывод полностью или, надеюсь, изменить его значение перед визуализацией. Единственная проблема заключается в том, что описанный выше хук, кажется, работает только для каждого модуля, то есть он не распространяется на весь сайт, поэтому в основном он не срабатывает для моего модуля.
Теперь, очевидно, я могу написать свой собственный модуль форматирования поля для вывода визуализированного узла. Но, похоже, это пустая трата, учитывая, что она уже существует.
другие подходы
Мои другие подходы были к HOOK_preprocess_node
и , HOOK_preprocess_field
но первый не содержит какой - либо view_mode
информации, а вторая содержит , по меньшей мере , 5 различных сложных структур , которые все имеют ссылки на view_mode
собственность на разных уровнях - и он чувствует себя достаточно Hacky , чтобы изменить у каждого из них ценности. Даже когда я изменил некоторые view_mode
свойства, результирующее изображение не меняется.
вопрос
Кто-нибудь знает чистый способ сделать шаг до того, как форматировщик полей будет отображать (модуля contrib) и изменять его настройки для каждого запроса на странице, то есть не нужно изменять настройки режима постоянного просмотра фактического типа контента?
view_mode
на hook_preprocess_node
, глупо меня! Интересно, существует ли что-нибудь подобное hook_field_formatter_view_alter()
в D8 ...
hook_field_formatter_view_alter()
или похожий, вероятно, уже больше года, к сожалению, его просто не существует. К твоему сведению,hook_preprocess_node()
безусловно , есть вview_mode
наличии, это$vars['view_mode']
не то,$vars['node']->view_mode
что ты, возможно, испытал.