प्रोग्राम से अप्रकाशित नोड्स को कैसे प्रकाशित करें


15

मेरे पास कुछ अप्रकाशित नोड हैं, जिनके लिए मेरे पास उनकी नोड आईडी है। मैं प्रोग्रामेटिक रूप से उन्हें कैसे प्रकाशित कर सकता हूं? निम्नलिखित की तरह एक क्वेरी का उपयोग करके कस्टम मॉड्यूल में इसे प्राप्त करना सही है?

db_query("UPDATE {node} SET status = 1 WHERE nid = %d", $nid)

हालाँकि यह सबसे साफ नहीं है लेकिन यह सबसे तेज़ है।
ऑस्कर कैल्वो सेप

3
इस पद्धति की मूलभूत समस्या यह है कि यह अपडेट नहीं होती है node_revision, इसलिए यह असंगति का कारण बनेगी।
आर्टफ्लोरोबोट

जवाबों:


20

का उपयोग करना db_query()एक Drupal 6 विधि है, जिसका उपयोग Drupal 7 में नहीं किया जाता है। आपकी नौकरी प्राप्त करने के लिए मैं इस कोड (किसी भी मैनुअल क्वेरी के बिना) का सुझाव देता हूं।

// load the node object
$node = node_load($nid);
// set status property to 1
$node->status = 1;
// re-save the node
node_save($node);

यदि आपके पास अधिक नोड आईडी है, और आप उन सभी नोड को प्रकाशित करना चाहते हैं, तो आप निम्नलिखित कोड का उपयोग कर सकते हैं।

$nids = array();
// Load all nodes in one go for better performance.
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
  // set status property to 1
  $node->status = 1;
  // re-save the node
  node_save($node);
}

3
है ना? db_queryएक ड्रुपल 7 विधि भी है। बस अलग-अलग तर्क देते हैं।

@andrewtweber, हाँ अब यह ड्रुपल का एक हिस्सा है लेकिन ड्रुपल 7 के पहले संस्करण को देखें और फिर दावा करें !!!
युसुफ

मैं किस हुक का उपयोग करूंगा? मैंने हुक_नोड_सुबमिट के अंदर जोड़ा है लेकिन मैं एक त्रुटि ले रहा हूं। कोई मदद?
सक्रांति

@sokratis in hook_form_alter अपने में एक कस्टम submitहैंडलर जोड़ें तो कस्टम सबमिट हैंडलर में यू कुछ इस तरह का उपयोग कर सकते हैं।
युसेफ

उद्धरण मत भूलना। $ नोड-> स्थिति = "1";
सेल्विन पोलिट

7

जब आप एक से अधिक (कई) लोड करने के लिए नोड_लोड (), नोड_लोड_मूल्ट () का उपयोग कर रहे हैं, तो कई हुक मॉड्यूल द्वारा लगाए जाएंगे , जैसे हुक_नोड_लोड , हुक_नोड_होल्डरेशन , हुक_नोड_पैरप , हुक_नोडे_केस । लेकिन ड्रूपल स्कीमा पर सीधे क्वेरी करने से उन हुक को नजरअंदाज कर दिया जाएगा और कई मुद्दों की ओर ले जाएगा।

प्रश्न हैं:

db_query("UPDATE {node} SET `status` = '1' WHERE `nid` =:nid ;"
    ,array(':nid'=>$node->nid));

db_query("UPDATE {node_revision} SET `status` = '1' WHERE `nid` =:nid AND  `vid` =:vid;"
    ,array(':nid'=>$node->nid,'vid'=> $node->vid));

उपरोक्त कोड का उपयोग करें यदि उपलब्ध मेमोरी से बाहर निकलने के कारण नोड_लोड () या नोड_लोड_मूल्ट () काम नहीं कर रहा है।

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