सामग्री प्रकार से सभी नोड्स पर पुनरावृति कैसे करें


22

मैं एक विशिष्ट सामग्री प्रकार के सभी नोड्स के क्षेत्र से कुछ जानकारी पुनर्प्राप्त करना चाहता हूं। मुझे पता है कि इसे कैसे करना है db_queryऔर सभी नोड आईडी प्राप्त करना है फिर उन पर पुनरावृति। अगर मैं यह जानना चाहूंगा कि क्या ड्रुपल फ़ंक्शंस का उपयोग करने का कोई दूसरा तरीका है।

जवाबों:


28

आप सीधे उस जानकारी को क्वेरी कर सकते हैं node_load_multiple()

$nodes = node_load_multiple(array(), array('type' => 'my_type'));

आप $conditionsसरणी (दूसरा तर्क) में जितनी चाहें उतनी संपत्ति जोड़ सकते हैं , इसलिए स्थिति, बनाई गई, आदि भी निष्पक्ष खेल हैं।

$conditionsतकनीकी रूप से पदावनत है (मैं इसके पक्ष में कल्पना करता हूं EntityFieldQuery) लेकिन ड्रुपल 7 से हटाए जाने वाले उस कार्यक्षमता की संभावना मूल रूप से कोई नहीं है। यह बहुत ज्यादा टूट जाएगा।


3
यह ड्रुपल 8 में चला गया है, हालांकि।
mpdonadio

मैं इस उत्तर को स्वीकार करूंगा क्योंकि यह बिल्कुल वही है जो मैं खोज रहा था, लेकिन @MPD समाधान का उपयोग करेगा क्योंकि यह Drupal 8 के साथ भी काम करेगा :)
drcelus

@drcelus हाँ एमपीडी की विधि निश्चित रूप से जाने के लिए सबसे अच्छा तरीका है, मैं शायद उल्लेख किया जाना चाहिए था कि - EntityFieldQueryसभी तरह :) मैं डाल इस किसी और चीज से भावी पीढ़ी के लिए और अधिक में है
क्लाइव

1
entity_load_multipleD8 में मौजूद है। आप संपत्तियों द्वारा लोड नहीं कर सकते, हालांकि।

स्पष्टीकरण के लिए धन्यवाद। मेरा मतलब था कि $ शर्तें D8 से दूर हो गई हैं।
mpdonadio

34

Drupal core नामक एक वर्ग प्रदान करता है EntityFieldQuery()। इसका उपयोग करने के लिए एक आसान दस्तावेज़ पृष्ठ भी है , जिसमें बहुत सारे उदाहरण हैं। अपने सरलतम रूप में:

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'page')
  ->propertyCondition('status', 1);

$result = $query->execute();

if (!empty($result['node'])) {
  $nids = array_keys($result['node']);
  $nodes = node_load_multiple($nids);

  foreach ($nodes as $node) {
    // do something awesome
  }
}

यह "पेज" प्रकार के सभी प्रकाशित नोड्स को लोड करेगा। आपको समय-समय पर इसे समायोजित करने की आवश्यकता होती है

$query = new EntityFieldQuery();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'page')
  ->propertyCondition('status', 1);

$result = $query->execute();

if (!empty($result['node'])) {
  $nids = array_keys($result['node']);

 foreach ($nids as $nid) {
    $node = node_load($nid, NULL, TRUE);
    // do something awesome
  }
}

एक बार में बहुत अधिक लोडिंग से बचने के लिए, जो मेमोरी समस्याओं का कारण बन सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.