Gibt es für einen bestimmten Taxonomiebegriff in D8 eine API-Funktion / -Methode, die alle Knotenentitäten zurückgibt, die darauf verweisen?
Gibt es für einen bestimmten Taxonomiebegriff in D8 eine API-Funktion / -Methode, die alle Knotenentitäten zurückgibt, die darauf verweisen?
Antworten:
Ich denke, der einfachste Weg, eine Datenbanktabelle abzufragen, zeichnet auf, taxonomy_index
welcher Knoten mit welchem Begriff versehen ist
function _get_nodes_by_term($term_id) {
$query = \Drupal::database()->select('taxonomy_index', 'ti');
$query->fields('ti', ['nid']);
$query->condition('ti.tid', $term_id);
$nodes = $query->execute()->fetchAssoc();
return $nodes;
}
dpm(_get_nodes_by_term(<term_id>));
Drupal Core macht es durch Ansichten.
Die sofort einsatzbereite Seitenanzeige wird von Ansichten erstellt. Wenn Sie also besuchen admin/structure/views/view/taxonomy_term
, ist diese Ansicht dafür verantwortlich, alle mit Tags versehenen Inhalte nach bestimmten Begriffen anzuzeigen, für die im Wesentlichen eine Datenbankabfrage ausgeführt wird.
Wenn Sie mehrere Term-IDs haben, können Sie ein Array der IDs anstelle nur eines einzelnen Werts übergeben.
$term_ids = array (1,2,3);
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
'field_tags' => $term_ids,
]);
Wenn Ihre Knoten keine Revision haben, funktioniert dieser Code. Standardmäßig wird die erste Revision zurückgegeben
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->condition('field_tags', $termId)
->execute();
Wenn Ihre Knoten mehrere Revisionen haben, Um die Knoten durch die letzte markierte Revision zu erhalten. Sie müssen den folgenden Code verwenden
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->latestRevision()
->condition('field_tags', $termId, '=')
->execute();
Wenn Sie mehrere Werte haben, können Sie ein Array verwenden
$termIds = [3,56,456];
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->latestRevision()
->condition('field_tags', $termIds)
->execute();