Pour un terme de taxonomie donné en D8, existe-t-il une fonction/méthode API qui renvoie toutes les entités de nœud qui le référencent?
Vous pouvez utiliser loadByProperties()
pour obtenir toutes les entités de noeud qui référencent $term_id
:
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
'field_tags' => $term_id,
]);
La façon la plus simple, je pense, est de rechercher la base de données taxonomy_index
la table enregistre quel nœud est étiqueté avec quel terme
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 le fait par des vues.
L'affichage de la page du terme boîte est créé par les vues, donc si vous visitez admin/structure/views/view/taxonomy_term
, cette vue est chargée d'afficher tout le contenu balisé par terme donné, qui exécute essentiellement une requête de base de données.
Si vous avez plusieurs identifiants de termes, vous pouvez transmettre un tableau des identifiants au lieu d'une seule valeur.
$term_ids = array (1,2,3);
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
'field_tags' => $term_ids,
]);
Si vos nœuds n'ont pas de révision, alors ce code fonctionnera, par défaut, il retournera la première révision
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->condition('field_tags', $termId)
->execute();
Si vos nœuds ont plusieurs révisions, pour obtenir les nœuds par la dernière révision balisée. Vous devez utiliser le code suivant
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->latestRevision()
->condition('field_tags', $termId, '=')
->execute();
si vous avez plusieurs valeurs, vous pouvez utiliser un tableau
$termIds = [3,56,456];
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->latestRevision()
->condition('field_tags', $termIds)
->execute();