Это вторая серия вот этого вопроса: 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?
Поменять стиль картинок перед рендерингом view
Главные вкладки
Лучший ответ
В результате получилось так:
* 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' : '';
}
По всей видимости на этом этапе рендер-массивы еще даже не созданы, поэтому мне и не удавалось их найти. Зато достаточно подменить стиль в настройках поля в одном месте, и дальше всё уже генерируется с новым стилем.
Комментарии
В результате получилось так:
* 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' : '';
}
По всей видимости на этом этапе рендер-массивы еще даже не созданы, поэтому мне и не удавалось их найти. Зато достаточно подменить стиль в настройках поля в одном месте, и дальше всё уже генерируется с новым стилем.