Câu trả lời:
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 cho 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.
taxonomy_term_load_multiple($results->fetchCol());
để tải các thuật ngữ trong một truy vấn duy nhất.
field_get_items('node', $node, 'field_category')
để có được các trường trong ngôn ngữ chính xác.
Đâ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;
}
if (arg(0) == 'node' && is_numeric(arg(1))) {$nid = arg(1);}
để có được nid
và $node = node_load($nid);
để làm cho chức năng của bạn hoạt động.