it-swarm.com.de

Wie ändere ich programmgesteuert Kontextfilter?

Basierend auf einem Blog-Beitrag habe ich den folgenden Code geschrieben.

/**
 * Implements hook_views_pre_view().
 */
function mm_views_pre_view(ViewExecutable $view, $display_id, array &$args) {
  if ($view->id() != 'product_listing' && $display_id != 'page') {
    return;
  }

  $tid = reset($args);


  if (! $tid) {
    return;
  }

  $term = Term::load($tid);
  $terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')
    ->loadTree($term->getVocabularyId(), $tid);

  foreach($terms as $child_term) {
    $args[] = $child_term->tid;
  }

}

Ich habe den Cache geleert, aber der Code, den ich geschrieben habe, hat keine Auswirkung. Die SQL-Abfrage wird nicht geändert. Es wird nur eine einzige Taxonomie-ID zurückgegeben. Ich habe Mehrere Werte zulassen für den Filter ausgewählt.

Was ist los mit dem Code? Wie kann ich es reparieren?

4
Codium

Argumente sollten mit , Oder + Verkettet werden.

Diese Arbeit:

  $term = Term::load($tid);
  $terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')
    ->loadTree($term->getVocabularyId(), $tid);

  foreach($terms as $child_term) {
    $args[0]  .= ',' . $child_term->tid;
  }
4
Codium