যখন কোনও নোড 'প্রকাশিত' থেকে 'অপ্রকাশিত' পরিবর্তিত হয় তখন আমি কীভাবে সনাক্ত করতে পারি?


17

ইন hook_node_update () , আমি সহজেই একটি নোডের 'nonportableinfo' বলতে পারেন (সেটি বা প্রকাশিত নয়) পরে এটি আপডেট করা হয়েছে।

তবে, আপডেট নোড প্রকাশিত হয়েছিল কিনা তা যাচাই করার কোনও সহজ উপায় আছে , তবে এখন তা নেই? (্য মচক্সফন্দক্স)?

আমি মনে করি নিয়মগুলির 'নোডের মান পরিবর্তিত হয়েছে' বা সেই লাইনের পাশাপাশি কিছু থাকতে পারে তবে আমি এই প্রোগ্রামটিগতভাবে করতে চাই।

আমি এই সমস্যাটি ফাগোর দ্বারা (বিধিগুলির বিকাশকারী) drupal.org- এ পেয়েছি যা ড্রুপাল in-এ এর সাথে কাজ করে বলে মনে হয়, তবে একটি সুন্দর ব্যাখ্যা প্রশংসিত হবে।

উত্তর:


31

কিছু মনে করো না. উপরে লিঙ্কিত ইস্যুটি পড়ার পরে (বিশেষত মন্তব্য # 38 ), আমি দেখতে পেয়েছি যে $ নোড অবজেক্ট (যে কোনও সত্তা, আসলে) 'মূল' ক্যাশেড অনুলিপিটি $ সত্তা-> মূলতে সঞ্চয় করে।

সুতরাং, আমি সনাক্ত করতে চেয়েছিলাম যে কোনও নোড 'স্থিতি = 1' থেকে 'স্থিতি = 0' এ পরিবর্তিত হয়েছে (নোড অপ্রকাশিত হলে এটি ঘটে), এবং নিম্নলিখিত কোডটি এটি করে:

<?php
function custom_node_update($node) {
  if ($node->type == 'article') {
    // Act on the unpublishing of an article.
    if ($node->original->status == 1 && $node->status == 0) {
      // Do something here.
    }
    // Act on the publishing of an article.
    if ($node->original->status == 0 && $node->status == 1) {
      // Do something here.
    }
  }
}
?>

3
আমি আমার নিজের প্রশ্নের উত্তর দেওয়া বন্ধ করব ;-)
জেরলিংগুই

5
কেন? এটা এখনও আমার কাছে সহায়ক ছিল, যার মূল্য একটি +1 ;-)
Uwe

হেই, গুগলের ফলাফলগুলিতে আমি নিজের উত্তরটিতে অবতীর্ণ হওয়া প্রায় 10 তম বার। ভবিষ্যতে আমাকে উত্তর দেওয়ার জন্য আমাকে অতীত ধন্যবাদ :)
geerlingguy

উপরের কোডটি যদি আপনি সংশোধন মডিউলটি ব্যবহার করেন তবে কাজ করবে না
মোহাম্মদ আনোয়ার

রেকর্ডের জন্য, এটি স্ট্যাটাস + ওয়ার্কফ্লো + অনুবাদে কাজ করতে পারে না, আমাকে ব্যবহার করতে হয়েছিল$entity->original->getTranslation($lng)->status->value == 0 && $entity->getTranslation($lng)->status->value == 1
কিশোর

1

node_save() নিম্নলিখিত কোড রয়েছে।

  try {
    // Load the stored entity, if any.
    if (!empty($node->nid) && !isset($node->original)) {
      $node->original = entity_load_unchanged('node', $node->nid);
    }
  }

entity_load_unchanged()ডাটাবেস থেকে সত্তা লোড করে (এই ক্ষেত্রে নোড); এটি চলমান মডিউলগুলি থেকে যে কোনও পরিবর্তন আসার আগে সত্তা অবজেক্টটিকে ফেরত দেয়।

কোনও প্রাক-সংরক্ষণের আগে কোডটি কার্যকর করা হয় এবং হুক আপডেট করুন।

module_invoke_all('node_presave', $node);
module_invoke_all('entity_presave', $node, 'node');

//... 

node_invoke($node, $op);

// Save fields.
$function = "field_attach_$op";
$function('node', $node);

module_invoke_all('node_' . $op, $node);
module_invoke_all('entity_' . $op, $node, 'node');

এই হুকগুলিতে কোনও পরিবর্তন হওয়ার আগে নোডের বৈশিষ্ট্যগুলি দেখা সম্ভব $node->original, উদাহরণস্বরূপ $node->original->status

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.