Рейтинг:1

Как добавить фильтр просмотра программно, используя hook_views_pre_view()

флаг gb

Я хочу добавить простой фильтр к существующему представлению в Drupal 9. Похоже, я могу добиться этого с помощью hook_views_pre_view(). В каждом примере, который я могу найти, включая все ссылки «Похожие вопросы», которые появляются при вводе заголовка этого поста, я вижу, что $представление->добавить_элемент() используется. Видеть: Программно добавлять открытые фильтры представлений

Однако, когда я пытаюсь запустить этот код:

функция sbn_views_pre_view ($ view, $ display_id, массив $ args) {
  если ($view->id() == 'draft_moderation_state') {
    // Получить массив черновиков nids
    $state = 'черновик';
    $results = sbn_get_all_nodes_in_moderation_state($state);

     // Фильтра draft_moderation_state нет, поэтому мы должны его добавить
      $ вид-> добавить_элемент (
        $view->current_display,
        'фильтр',
        'узел',
        'нид',
        множество(
          'оператор' => '=',
          'значение' => '59',
          'группа' => 1
        )
      );
  }
}

Я получаю эту ошибку:

Вызов неопределенного метода Drupal\views\ViewExecutable::add_item()

Какой командой добавить фильтр hook_views_pre_view() в друпал 9?

Рейтинг:0
флаг gb

Я все еще хотел бы знать, как добавить фильтр с помощью hook_views_pre_view(), но я решил свою более серьезную проблему (программную фильтрацию существующего представления), используя

hook_views_query_alter()

функция sbn_views_query_alter ($ представление, $ запрос) {
   если ($view->id() == 'draft_moderation_state') {    
      $field = 'node_field_data.nid';
      // Получить массив черновиков nids
      $state = 'черновик';
      $value = sbn_get_all_nodes_in_moderation_state($state);
      $оператор = 'ВХОД';
      $query->где[1]['условия'][] = [
        "поле" => $поле,
        "значение" => $значение,
        "оператор" => $оператор,
      ];
  }
}
Рейтинг:0
флаг cn

$вид->setHandler() работал на меня. Я думаю, что это должно быть эквивалентно коду в вашем вопросе:

$nid_filter = [
  'id' => 'нид',
  'таблица' => 'node_field_data',
  'поле' => 'нид',
  'значение' => ['значение' => 59],
  'оператор' => '=',
];
$view->setHandler($view->current_display, 'filter', 'nid', $nid_filter);

Рейтинг:-1
флаг um

$view->add_item(...) — это Drupal 7

Это проблема Drupal 7 и Drupal 9:

было бы полезно, если бы пользователи этого форума указывали версию Drupal при отправке вопросов.

SomebodySysop avatar
флаг gb
Виноват. Что такое команда для добавления фильтра в hook_views_pre_view() в Drupal 9?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.