Puncte:1

Cum să adăugați filtrul de vizualizare în mod programatic folosind hook_views_pre_view()

drapel gb

Vreau să adaug un filtru simplu la o vizualizare existentă în Drupal 9. Se pare că pot realiza acest lucru cu hook_views_pre_view(). În fiecare exemplu pe care îl pot găsi, inclusiv toate link-urile „Întrebări similare” care apar la introducerea titlului acestei postări, văd că $view->add_item() este folosit. Vedea: Adăugați filtrul de vizualizări expuse în mod programatic

Cu toate acestea, când încerc să rulez acest cod:

funcția sbn_views_pre_view($view, $display_id, array $args) {
  if ($view->id() == 'draft_moderation_state') {
    // Obține o serie de nid-uri de schiță
    $state = 'schiță';
    $rezultate = sbn_get_all_nodes_in_moderation_state($state);

     // Nu există filtru draft_moderation_state, așa că trebuie să-l adăugăm
      $view->add_item(
        $view->current_display,
        'filtru',
        'nodul',
        'nid',
        matrice(
          'operator' => '=',
          'value' => '59',
          „grup” => 1
        )
      );
  }
}

Primesc această eroare:

Apel la metoda nedefinită Drupal\views\ViewExecutable::add_item()

Care este comanda pentru adăugarea filtrului hook_views_pre_view() în Drupal 9?

Puncte:0
drapel gb

Aș dori totuși să știu cum să adaug un filtru folosind hook_views_pre_view(), dar am rezolvat problema mea mai mare (filtrarea programatică a unei vizualizări existente) folosind

hook_views_query_alter()

funcția sbn_views_query_alter($view, $query) {
   if ($view->id() == 'draft_moderation_state') {    
      $field = 'node_field_data.nid';
      // Obține o serie de nid-uri de schiță
      $state = 'schiță';
      $valoare = sbn_get_all_nodes_in_moderation_state($state);
      $operator = 'IN';
      $query->where[1]['conditions'][] = [
        „câmp” => $câmp,
        „valoare” => $valoare,
        "operator" => $operator,
      ];
  }
}
Puncte:0
drapel cn

$view->setHandler() a lucrat pentru mine. Cred că acesta ar trebui să fie echivalent cu codul din întrebarea dvs.:

$nid_filter = [
  'id' => 'nid',
  'table' => 'node_field_data',
  'field' => 'nid',
  'valoare' => ['valoare' => 59],
  'operator' => '=',
];
$view->setHandler($view->current_display, 'filter', 'nid', $nid_filter);

Puncte:-1
drapel um

$view->add_item(...) este Drupal 7

Este problema Drupal 7 vs Drupal 9:

ar fi util dacă utilizatorii acestui forum ar pune o versiune de Drupal atunci când postează întrebări.

SomebodySysop avatar
drapel gb
Greșeala mea. Care este comanda pentru a adăuga filtru în hook_views_pre_view() în Drupal 9?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.