निर्माण पर नोड परिवर्तित दिनांक के लिए Drupal को कैसे रोकें?


9

कस्टम माइग्रेशन स्क्रिप्ट बनाने के साथ मेरे मुद्दों के बारे में यह मेरा दूसरा प्रश्न है।

मैं केवल नए नोड बना रहा हूं और अपडेट की परवाह नहीं करता।

कोड:

        $node = new stdClass();
        $node->type = 'migrate';
        $node->title = $content['title'];
        $node->language = LANGUAGE_NONE;

        $node->created = (int) date('U',strtotime($content['created']));

        $modified = $content['modified'];               
        if (! empty($modified) && $modified != '0000-00-00 00:00:00') {
            $modified = (int) date('U',strtotime($modified));
        } else {
            $modified = 0;
        }               
        $node->changed = $modified;

        node_object_prepare($node);

        #some lines later
        node_save($node);

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

जवाबों:


14

आपको कॉल करने से पहले अपनी माइग्रेशन स्क्रिप्ट में changedनोड ऑब्जेक्ट पर एक कस्टम प्रॉपर्टी सेट करके , मूल समय को संरक्षित करने में सक्षम होना चाहिए , और फिर नोड_प्रेशेस हुक को लागू करना चाहिए:$node->modifiednode_save()

/**
 * Implements hook_node_presave().
 */
function mymodule_node_presave($node) {
  $node->changed = $node->modified;
}

यह सभी मॉड्यूल को कॉल करने से पहले node_save()सेट के बाद से काम करेगा $node->changedजो कार्यान्वित करते हैं hook_node_presave()


हाँ यह 100% काम करता है :)
कॉडियो

1
संदेह है कि मुझे इसके लिए गोली मार दी जाएगी, लेकिन अगर मेरी तरह आप ड्रश के माध्यम से एक अल्पकालिक स्क्रिप्ट चला रहे हैं जो कि एक मॉड्यूल का हिस्सा नहीं है और आप एक हुक आदि को लागू करने के लिए केवल एक मॉड्यूल को लागू नहीं करना चाहते हैं तो यह db_query('UPDATE {node} SET created=:created, changed=:changed WHERE nid=:nid', array(':created'=>$whatever,':changed'=>$whatever,':nid'=>$node->nid));बचत के बाद काम करता है ।
Artfulrobot

मुझे नफरत है कि हमें हुक के रूप में कुछ अजीब करना है (अजीब है क्योंकि परिवर्तन पूरी तरह से अलग कोड सेगमेंट में होता है), लेकिन यह ड्रुपल की गलती है, आपकी नहीं। +1
केनी वायलैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.