it-swarm.it

Come posso ottenere un elenco di tutti i termini di tassonomia assegnati a un nodo?

Ho un nodo e voglio ottenere tutti i termini di tassonomia assegnati al nodo.

In drupal 6 potrei usare $node->taxonomy e il taxonomy_* funzioni ma queste non esistono in drupal 7.

13
Rwky

I termini della tassonomia sono implementati nei campi in Drupal 7. Supponendo che tu abbia definito un campo di tassonomia chiamato field_category per il tuo tipo di contenuto, puoi accedervi come:

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

Se non si ha accesso al nome del campo, probabilmente il modo più semplice per i nodi è di interrogare direttamente il database:

$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);
}

Tieni presente, tuttavia, che potresti finire per trattare un miscuglio di termini da diversi vocabolari se hai più di un campo di tassonomia.

21
keithm

Ecco un modo molto generico per prendere tutti i termini senza specificare i nomi dei campi e senza 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