it-swarm-vi.com

Làm cách nào để có được danh sách tất cả các thuật ngữ phân loại được gán cho một nút?

Tôi có một nút và muốn nhận tất cả các thuật ngữ phân loại được gán cho nút.

Trong drupal 6 Tôi có thể sử dụng $node->taxonomytaxonomy_* chức năng nhưng chúng không tồn tại trong drupal 7.

13
Rwky

Các thuật ngữ phân loại được triển khai trong các trường trong Drupal 7. Giả sử bạn đã xác định trường phân loại có tên là trường_cách cho loại nội dung của mình, bạn có thể truy cập dưới dạng:

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

Nếu bạn không có quyền truy cập vào tên trường, có lẽ cách dễ nhất đối với các nút là truy vấn trực tiếp cơ sở dữ liệu:

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

Mặc dù vậy, hãy ghi nhớ rằng bạn có thể sẽ xử lý một mớ thuật ngữ từ các từ vựng khác nhau nếu bạn có nhiều hơn một lĩnh vực phân loại.

21
keithm

Đây là một cách rất chung chung để lấy tất cả các thuật ngữ mà không chỉ định tên trường và không có 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