ฉันมีโหนดและต้องการรับเงื่อนไขอนุกรมวิธานทั้งหมดที่กำหนดให้กับโหนด
ใน drupal 6 ฉันสามารถใช้$node->taxonomy
และtaxonomy_*
ฟังก์ชั่นได้ แต่สิ่งเหล่านี้ไม่มีอยู่ใน drupal 7
ฉันมีโหนดและต้องการรับเงื่อนไขอนุกรมวิธานทั้งหมดที่กำหนดให้กับโหนด
ใน drupal 6 ฉันสามารถใช้$node->taxonomy
และtaxonomy_*
ฟังก์ชั่นได้ แต่สิ่งเหล่านี้ไม่มีอยู่ใน drupal 7
คำตอบ:
เงื่อนไขการใช้งาน Taxonomy ถูกนำไปใช้ในฟิลด์ใน Drupal 7. สมมติว่าคุณได้กำหนดฟิลด์ taxonomy ชื่อ 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);
}
โปรดระลึกไว้เสมอว่าคุณอาจมีข้อตกลงที่ไม่ชัดเจนจากคำศัพท์ต่าง ๆ หากคุณมีมากกว่าหนึ่งสาขาอนุกรมวิธาน
taxonomy_term_load_multiple($results->fetchCol());
เพื่อโหลดคำศัพท์ในแบบสอบถามเดียว
field_get_items('node', $node, 'field_category')
เพื่อรับฟิลด์ในภาษาที่ถูกต้อง
ต่อไปนี้เป็นวิธีทั่วไปในการรับเงื่อนไขทั้งหมดโดยไม่ระบุชื่อฟิลด์และไม่มี 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);
เพื่อให้การทำงานของคุณ