노드에 할당 된 모든 분류 용어 목록을 얻으려면 어떻게합니까?


13

노드가 있는데 노드에 할당 된 모든 분류 용어를 가져오고 싶습니다.

drupal 6에서는 사용할 수 $node->taxonomy있고 taxonomy_*기능은 있지만 drupal 7에는 존재하지 않습니다.

답변:


21

분류 용어는 Drupal 7의 필드에서 구현됩니다. 컨텐츠 유형에 대해 field_category라는 분류 필드를 정의했다고 가정하면 다음과 같이 액세스 할 수 있습니다.

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

필드 이름에 액세스 할 수없는 경우 노드에 대한 가장 쉬운 방법 은 데이터베이스를 직접 쿼리하는 것입니다.

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

그러나 분류법 필드가 두 개 이상인 경우 다른 어휘에서 나오는 용어를 뒤섞을 수 있습니다.


분류 필드 이름을 모르면 어떻게합니까? 이름은 내용 유형마다 다르며 모든 노드에 대한 모든 용어를 얻고 싶습니다.
Rwky

1
필드 이름을 모르는 경우 방법을 추가했습니다.
keithm

4
특히 두 번째 버전에서는 taxonomy_term_load_multiple($results->fetchCol());단일 쿼리에서 용어를로드하는 데 사용할 수 있습니다 .
Berdir

1
아, 그리고 당신은 field_get_items('node', $node, 'field_category')올바른 언어로 필드를 얻을 수 있습니다.
Berdir

taxonomy_index 기술에서 선택은 공개 된 노드에서만 작동합니다. 게시되지 않은 컨텐츠에 대해서는 해당 테이블이 유지되지 않습니다.
Dave Cohen

2

다음은 필드 이름을 지정하지 않고 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;
}

드루팔 초보자를위한, 내가 추가 할 if (arg(0) == 'node' && is_numeric(arg(1))) {$nid = arg(1);}를 얻을 수 nid$node = node_load($nid);함수 작업을하기 위해서이다.
Sébastien Gicquel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.