क्या मैं प्रोग्रामिक रूप से एक नया नोड संशोधन बना सकता हूं, बिना नए संशोधन के "चालू" एक हो सकता है?


9

जब भी मेरा फ़ीड आयात सामग्री के मौजूदा टुकड़े का एक नया संस्करण पाता है, तो यह ओवरराइटिंग डेटा के बजाय इस नोड का एक नया संशोधन बनाता है।

आम तौर पर नया संशोधन "चालू" हो जाता है। मैं चाहूंगा कि वर्तमान में प्रदर्शित संशोधन फिर भी वही रहे, और अगर कोई नया प्रकाशित किया जाए तो एक मॉडरेटर को बाद में निर्णय लेने देना चाहिए।


1
क्या आपने वर्कबेंच मॉडरेशन, वर्कफ़्लो, या किसी भी मॉड्यूल का उपयोग करने की कोशिश की है जो समान कार्य करते हैं?
mpdonadio

मैंने नहीं किया है मैंने शुरू में यह मान लिया था कि क्योंकि मैं कोड में नोड बनाता हूं, उन्होंने लागू नहीं किया। शायद ऐसी बात नहीं है।
१३:१२ पर सुस्ती

जवाबों:


13

एक मानक Drupal इंस्टॉल आपको "लंबित" संशोधन बनाने की अनुमति नहीं देता है। आपके पास दो विकल्प हैं:

  1. प्रोग्रामिक रूप से एक नया संशोधन बनाएँ, लेकिन प्रोग्रामिक रूप से मूल संशोधन पर वापस लौटें (जो एक नया संशोधन भी बनाता है, लेकिन इसमें मूल सामग्री है)
  2. (अनुशंसित) वर्कबेंच मॉडरेशन, रिविजनिंग या वर्कफ़्लो का उपयोग करें जो संस्करण नियंत्रण और / या एक्सेस कंट्रोल के लिए अच्छी तरह से सोचा गया समाधान हैं।

विकल्प 1 के लिए: आप इस कोड को नए नियम के रूप में जोड़ सकते हैं या नए मॉड्यूल में इसका उपयोग कर सकते हैं

<?php
  // Programatically load the existing revision and save it
  // Taken from http://api.drupal.org/api/drupal/modules!node!node.module/function/node_save/7
  // Load the revision
  $original_revision = node_load($nid);
  $original_revision->revision = 1;
  $original_revision->log = t('Copy of the revision from %date.', array('%date' => format_date($original_revision->revision_timestamp)));

  $new_revision = node_load($nid);
  // Make any changes to the new revision here...
  $new_revision->revision = 1;
  $new_revision->log = t('Summarize your changes here');

  // Save the new revision first
  node_save($new_revision);

  // Save the original one again so that it is still the current revision
  node_save($original_revision);

  watchdog('content', '@type: reverted %title revision %revision.', array('@type' => $node_revision->type, '%title' => $node_revision->title, '%revision' => $node_revision->vid));
  drupal_set_message(t('@type %title was saved with a new revision, but reverting to original revision from %revision-date.', array('@type' => node_type_get_name($node_revision), '%title' => $node_revision->title, '%revision-date' => format_date($node_revision->revision_timestamp))));
  drupal_goto('node/' . $node_revision->nid . '/revisions');
?>

विकल्प 2 के लिए: मैं संशोधन या वर्कफ़्लो पर कार्यक्षेत्र की सिफारिश करूंगा, लेकिन आपकी आवश्यकताओं के आधार पर प्रत्येक अलग है। कार्यक्षेत्र पुनरीक्षण के उत्तराधिकारी की तरह है, और वर्कफ़्लो केवल संस्करण नियंत्रण की तुलना में बहुत अधिक है, इसलिए यह आपकी आवश्यकताओं के लिए एक अच्छा फिट हो सकता है या नहीं।

यहाँ कार्यक्षेत्र और वर्कफ़्लो के बीच अंतर पर एक त्वरित ब्रेकडाउन है


पहला विकल्प बहुत अच्छा होगा, लेकिन मैं रिवर्ट कैसे बनाऊं?
१५:१२ पर सुभार

विकल्प 1 के लिए कोड जोड़ा गया, लेकिन वास्तव में विकल्प 2 शायद आपकी सबसे अच्छी शर्त है क्योंकि यह मूल संस्करण को बार
जॉनाथन एल्मोर

लिंक टूट गया है
डिजिटोफर

हुक_फॉर्म_ल्टर में कहां लिखें?
केटीएम

लिंक ठीक किया गया। @IcecreamJelly, hook_node_update आज़माएं।
जॉनाथन एलमोर

2

यह एक अनुमान है, लेकिन मैं कार्यक्षेत्र मॉड्यूल में एक शॉट में वर्कबेंच मॉडरेशन सब-मॉड्यूल दूंगा । मैंने वर्कफ़्लो की तुलना में इसे स्थापित करना बहुत आसान पाया है ।

तथ्य यह है कि आप कोड में नोड्स बना रहे हैं, तब तक कोई फर्क नहीं पड़ता, जब तक node_save()कि सामग्री प्रकार के लिए उचित सेटिंग्स वाले उपयोगकर्ता के रूप में रन (मॉडरेशन राज्य नोड एपीआई के साथ नियंत्रित किए जाते हैं)। हालाँकि, इसका मतलब यह हो सकता है कि फीड्स के चलने पर उचित उपयोगकर्ता के रूप में चीजों को प्राप्त करने के लिए आपको कुछ सत्र शेंनिगन करने की आवश्यकता है।


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