পোস্ট-সেভ কর্মের জন্য আমি কোন হুক ব্যবহার করতে পারি?


16

আমি এই একই প্রশ্ন সহ বেশ কয়েকটি পোস্ট পেয়েছি, তবে উত্তরগুলি সর্বদা অন্য কোনও বিষয়ে ডাইভার্ট করে বা তারা আমার প্রয়োজনে কাজ করে না।

কোনও নোড সংরক্ষণ করার পরে, আমি চাই আমার কাস্টম মডিউলটি আমার কাস্টম টেবিলগুলির মধ্যে একটিতে একটি সারি সন্নিবেশ করুক যাতে নতুন নোডের নীড থাকে contains কখন hook_node_submitডাকা হয়, নিডের অস্তিত্ব এখনও নেই। hook_node_insertনিড থাকে তবে কেবল নোডটি সংরক্ষণের সময় প্রথমবার বলা হয়, তবে নোডটি সংরক্ষিত হওয়ার সাথে সাথে আমি প্রতিবারই ব্যবস্থা নেওয়া দরকার।

আমার পরিকল্পনাটি হ'ল আমার কার্যকারিতাটি তার নিজস্ব পদ্ধতিতে আলাদা করা এবং উভয় হুক প্রয়োগ করা, তবে আমি দ্রুপালের সাথে জিনিসগুলি সঠিকভাবে করতে শেখার চেষ্টা করছি এবং তাই আমি ভাবছি যে এমন কোনও হুক আছে যা আসলে আমার প্রয়োজনীয়তার সাথে খাপ খায়।

এমন কোনও হুক আছে যা প্রতিবার নোড সংরক্ষণ করার পরে ডাকা হয় এবং সেভ শেষ হয়ে গেলে?


3
আপনি সমন্বয় ব্যবহার করতে পারেন hook_node_insertএবং hook_node_update(প্রত্যেক সময় একটি নোড সংরক্ষিত হচ্ছে কাজ করে)।
অজিৎ

হ্যাঁ, আমি উপরের পোস্টে এটি বর্ণনা করেছি।
কেনি ওয়াইল্যান্ড

@ কেনিওয়াইল্যান্ড আপনি উল্লেখ করেছেন hook_node_submitকিন্তু না hook_node_update?
ডেভিড থমাস

আপনি নোড nid hook_node_insertপাশাপাশি পাবেন hook_node_update
সুমিত মদন

2
hook_node_insert()এবং hook_node_update()এর জন্য সঠিক হুকগুলি hook_node_submit()নোড সংরক্ষণ করার আগে ফর্ম জমা দেওয়ার প্রক্রিয়া চলাকালীন ডাকা হয়। আপনি যখনই কোনও হুক যোগ করবেন / মুছবেন তখন যে কোনও সময় আপনাকে ক্যাশে সাফ করার দরকার নেই
ক্লাইভ

উত্তর:


5

প্রশ্নের মন্তব্যগুলিতে দেখে মনে হচ্ছে সুস্পষ্ট সমাধান হুক ব্যবহার করা hook_node_insert()এবং hook_node_update()

উত্তরে বর্ণিত হিসাবে আমি আসলে খুব অনুরূপ কিছু করেছি: আমি একটি ফাংশন লিখেছিলাম যা প্রতিবার কোনও নোড তৈরি / আপডেট হওয়ার পরে যা করতে চাই তা করে এবং তারপরে সেই প্রতিটি হুকের কাছ থেকে কল করে। এটা ঠিক কাজ করে।


চমৎকার! আপনি এমনকি এটি থেকে করতে পারে hook_form_alter()drupal.stackexchange.com/a/221041/15055
লেমনেক্স

1
@leymannx এই পদ্ধতিটির খারাপ দিকটি কেবল তখনই বলা হবে যখন কোনও নির্দিষ্ট ফর্মের মাধ্যমে নোড inোকানো / আপডেট করা হয়। আমার ক্ষেত্রে, আমার নোডগুলির সমস্ত সংযোজন এবং পরিবর্তনগুলি ধরা দরকার।
ডোনাট

12

এটি করার সঠিক উপায় হ'ল দ্রুপালের ডিবি লেনদেনকে সম্মান করা। আপনি যদি hook_node_insert এ কোনও ডাটাবেস ক্রিয়া করতে চান তবে আপনাকে অবশ্যই নোডটি এখনও সংরক্ষিত হয়নি তা বিবেচনা করতে হবে। যার অর্থ এটি যদি ব্যর্থ হয় এবং ঘূর্ণায়মান হয় তবে আপনি আপনার ডাটাবেসে অনাথ ডেটা শেষ করেছেন। সুতরাং ড্রুপাল ডাটাবেস এপিআই ব্যবহার করা উচিত এবং সরাসরি কোয়েরি কার্যকর করা উচিত নয়।

আপনি যদি নোকটি হুক_নোড_ইন্টারে নিজেই আপডেট করতে চান তবে আপনি নোড_সেভ ব্যবহার করা সম্ভব হবেন না কারণ নোডটি এখনও ডাটাবেসে সংরক্ষিত হয়নি এবং কল করে এটি ব্যতিক্রম ঘটায়। একটি সমাধান হ'ল রেজিস্ট্রার_শুটডাউন_ফাংশন ফাংশন এবং পাসিং এনআইডি ব্যবহার করা, আপনি এটি নিশ্চিতভাবে সংরক্ষণ করেছেন তা নিশ্চিত করতে আপনি নোড_লোড ব্যবহার করতে পারেন এবং তারপরে নতুন নোডে আপনি যে কোনও পদক্ষেপ নিতে চান তা করতে পারেন।

function your_module_node_update($node){
  if($node->type == 'your_node'){
    register_shutdown_function('_your_module_post_insert',$node->nid);
  }
}

function _your_module_post_insert($nid) {
  $node = node_load($nid);
  if ($node) {
      node_save($node);
  }
} 

আপডেট: আপনি এখানে একটি সহজ বিকল্পও খুঁজে পেতে পারেন /programming//a/24035797/1726778


1
ভাল ধারণা. যদিও এটি ব্যবহার করা ভাল drupal_register_shutdown_function()। কিন্তু জেনে রাখুন যে তাদের উভয়ের পিএইচপি-FPM পরিবেশে সমস্যার আছে বলে মনে হচ্ছে না, দেখতে drupal.stackexchange.com/q/102603/10667
Shevchuk

আমি কষ্ট পরীক্ষণ চাপ ছিল যদি একটি নোড একটি জৈব গ্রুপ হিসেবে কাজ করছিল og_is_group। আমি মনে করি আমি এই কারণে ভ্রান্ত নেতিবাচক পেয়েছিলাম।
আইসাইক্লিং

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