web-dev-qa-db-fra.com

Comment obtenir une liste de tous les termes de taxonomie attribués à un nœud?

J'ai un nœud et je souhaite obtenir tous les termes de taxonomie attribués au nœud.

Dans drupal 6 je pourrais utiliser $node->taxonomy et le taxonomy_* fonctions mais celles-ci n'existent pas dans drupal 7.

13
Rwky

Les termes de taxonomie sont implémentés dans les champs de Drupal 7. En supposant que vous ayez défini un champ de taxonomie nommé field_category pour votre type de contenu, vous pouvez y accéder en tant que:

$language = 'und'; // or will be provided by some Drupal hooks
foreach ($node->field_category[$language] as $delta => $value) {
  $term = taxonomy_term_load($value['tid']);
}

Si vous n'avez pas accès au nom du champ, le moyen le plus simple pour les nœuds est probablement d'interroger directement la base de données:

$results = db_query('SELECT tid FROM {taxonomy_index} WHERE nid = :nid', array(':nid' => $node->nid));
foreach ($results as $result) {
  $term = taxonomy_term_load($result->tid);
}

Gardez cependant à l'esprit que vous pourriez finir par traiter un mélange de termes provenant de vocabulaires différents si vous avez plus d'un champ de taxonomie.

21
keithm

Voici une façon très générique de saisir tous les termes sans spécifier de noms de champs et sans db_query:

function example_get_terms($node) {
  $terms = array();

  foreach (field_info_instances('node', $node->type) as $fieldname => $info) {
    foreach (field_get_items('node', $node, $fieldname) as $item) {
      if (is_array($item) && !empty($item['tid']) && $term = taxonomy_term_load($item['tid'])) {
        $terms[] = $term->name;
      }
    }
  }
  return $terms;
}
2
Ronnbot