Я использую блок представлений на своем веб-сайте, содержимое этого представления фильтруется программно. Теперь я получаю сообщения от пользователей, которые видят неверную информацию. Фильтр основан на текущем вошедшем в систему пользователе. Поскольку мне нужна эта информация в обычном фильтре, а не в контекстном, я создал простой модуль для изменения значения фильтра.
Мой фильтр такой:
(
Тип контента = contenttype_a
И
uid(автор узлов) = */это значение добавляется программно*/
)
ИЛИ ЖЕ
(
Тип контента = contenttype_b
И
user_target_id(reference) = */это значение добавляется программно*/
)
Чем я использую это в своем модуле:
*/
функция entity_access_views_pre_view (ViewExecutable $ view, $ display_id, массив и $ args) {
$currentUser = \Drupal::currentUser();
$cuid = $currentUser->id();
/* @ Представление фильтра: Медиа */
если ($view->id() == 'my_view_id') {
если ($display_id == 'block_1' || $display_id == 'page_1' || $display_id == 'page_2') {
$filters = $view->display_handler->getOption('filters');
$filters['uid']['value']['value'] = $cuid;
$filters['user_target_id']['value']['value'] = $cuid;
$view->display_handler->overrideOption('filters', $filters);
}
}
}
Поскольку я не могу найти проблему, у меня есть сомнения, работает ли выше, как я хочу. Поэтому я хотел проверить, не видите ли вы чего-нибудь странного или фальшивого. Можно ли каким-то образом кэшировать это значение фильтра? Или, может быть, есть лучший способ сделать это.
Я не могу использовать контекстный фильтр, который я бы предпочел, потому что представление показывает два типа контента, где для каждого типа контента фильтр должен быть разным.
Заранее спасибо.