Я использую Drupal 9 и views_field_view для встраивания «дочернего» представления в «родительское» представление. Поскольку в родительском представлении есть несколько строк, я получаю несколько отображаемых «дочерних» представлений. Это предотвращает рендеринг «разбиения на страницы», поскольку «идентификатор пейджера» одинаков для нескольких отображаемых дочерних представлений.
Я могу обойти эту проблему рендеринга, программно установив идентификатор пейджера. См. код ниже.
используйте Drupal\views\ViewExecutable;
функция hook_views_pre_view (ViewExecutable $ view, $ display_id, массив и $ args) {
если ($view->id() == '<view_id>') {
$unique_id = $view->аргументы[0]; // аргумент, который является уникальным идентификатором
$view->pager->options['id'] = $unique_id;
}
}
Используя приведенный выше код в модуле, теперь появляется пейджер дочернего представления. Однако нажатие номеров или кнопок пейджера приводит к обновлению родительского представления вместо дочернего.
Как я могу изменить пейджер для «дочернего» представления, чтобы он обновлял дочернее представление вместо родительского?
Кажется, мне нужно правильно инициализировать пейджер или изменить jquery, чтобы он обновлял дочернее представление вместо родительского? Как я могу это сделать?
Вот некоторые вещи, которые я изучал, но пока не помогли:
- Исправление просмотров Drupal 7 - не применимо, так как представления перемещены в ядро?
- Просмотры загружают больше проблем, Представления показывают больше модуля, Просматривает проблему бесконечной прокрутки
- В модуле views_field_view кажется, что он пытается установить уникальный идентификатор для пейджера перед использованием следующего
$view->initPager();
для инициализации пейджера. Однако отладка показывает, что установленный идентификатор не применяется к представлению $. Возможно, что-то изменилось с initPager? (хотя API не указывает, что он есть)