Поменять стиль картинок перед рендерингом view

Главные вкладки

Аватар пользователя marassa marassa 25 июня 2019 в 15:21

Это вторая серия вот этого вопроса: https://drupal.ru/node/139772
По-прежнему бьюсь над задачей подмены стилей картинок, выводимых форматтером PhotoSwipe в контексте View в зависимости от количества результатов в этом самом View.
Зайдя в тупик с twig-подходом, решил действовать в рамках хука HOOK_views_pre_render. Класс View содержит в себе атрибут element, с которого по идее должно начинаться дерево рендер-массивов, содержащих все элементы вывода View, включая и эти самые мои картинки где-то на дне. Только вот похоже не содержит.
ddl(array_keys($view->element));
выводит всевозможные атрибуты элемента, начинающиеся на #, но ни одного дочернего элемента.
Что я опять делаю не так? Как мне из HOOK_views_pre_render добраться до рендер-массивов отдельных полей View?

Лучший ответ

Аватар пользователя marassa marassa 26 июня 2019 в 15:16

В результате получилось так:

/**
 * Implements hook_views_pre_render().
 */

function MYMODULE_views_pre_render(Drupal\views\ViewExecutable $view) {
  if ($view->id() !== 'photo_slideshow' || !in_array($view->current_display, ['photo_gallery', 'artist_gallery', 'user_gallery'])) return;

...

  if ( $view->total_rows > 8) return;
  $view->field['field_picture']->options['settings']['photoswipe_node_style'] = $view->total_rows > 1 ? 'large_gallery_thumbnail' : '';

}

По всей видимости на этом этапе рендер-массивы еще даже не созданы, поэтому мне и не удавалось их найти. Зато достаточно подменить стиль в настройках поля в одном месте, и дальше всё уже генерируется с новым стилем.

Комментарии

Аватар пользователя marassa marassa 26 июня 2019 в 15:16

В результате получилось так:

/**
 * Implements hook_views_pre_render().
 */

function MYMODULE_views_pre_render(Drupal\views\ViewExecutable $view) {
  if ($view->id() !== 'photo_slideshow' || !in_array($view->current_display, ['photo_gallery', 'artist_gallery', 'user_gallery'])) return;

...

  if ( $view->total_rows > 8) return;
  $view->field['field_picture']->options['settings']['photoswipe_node_style'] = $view->total_rows > 1 ? 'large_gallery_thumbnail' : '';

}

По всей видимости на этом этапе рендер-массивы еще даже не созданы, поэтому мне и не удавалось их найти. Зато достаточно подменить стиль в настройках поля в одном месте, и дальше всё уже генерируется с новым стилем.