मुझे नोड के लिए सौंपे गए सभी टैक्सोनॉमी शर्तों की सूची कैसे मिलेगी?


13

मेरे पास एक नोड है और सभी टैक्सोनॉमी शर्तों को नोड को सौंपा जाना चाहता हूं।

ड्रुपल 6 में मैं उपयोग कर सकता है $node->taxonomyऔर taxonomy_*कार्य लेकिन ये ड्रुपल 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
यदि आप फ़ील्ड नाम नहीं जानते हैं तो एक विधि जोड़ी गई है।
16

4
विशेष रूप से दूसरे संस्करण में, आप taxonomy_term_load_multiple($results->fetchCol());एक ही क्वेरी में शर्तों को लोड करने के लिए उपयोग कर सकते हैं ।
बर्दिर

1
ओह, और आप field_get_items('node', $node, 'field_category')सही भाषा में फ़ील्ड प्राप्त करने के लिए उपयोग कर सकते हैं।
बर्दिर

ध्यान दें कि टैक्सोनॉमी_इंडेक्स तकनीक से चुनिंदा नोड्स के साथ ही काम करता है। अप्रकाशित सामग्री के लिए उस तालिका का रखरखाव नहीं किया जाता है।
डेव कोहेन

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

Drupal शुरुआत के लिए, मैं जोड़ना होगा if (arg(0) == 'node' && is_numeric(arg(1))) {$nid = arg(1);}प्राप्त करने के लिए nidऔर $node = node_load($nid);के लिए अपने समारोह काम करने के लिए में।
सेबास्टियन गिक्वेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.