হুক পিছনে মূল ধারণা কি?


120

আমি পিএইচপি-তে অন্তর্বর্তী। আমার দক্ষতা আমি Drupal এর 7. শেখার Drupal এর স্থাপত্য ধারণা শেখার সময় শুরু সেরে, পদ আঙ্গুলসমূহ এবং বুটস্ট্র্যাপিং আমাকে অনেক হতভম্ব। আমি "প্রো ড্রুপাল ডেভলপমেন্ট" বইটি এবং ড্রুপাল.আরজে কিছু ডকুমেন্টেশন পড়েছি, তবে কীভাবে ওয়েব পৃষ্ঠাগুলি প্রদর্শনের জন্য দ্রুপালে হুক কাজ করে তা শিখতে আমার পক্ষে এত উন্নত।

সরল কথায় হুক কি তা আমাকে বলতে পারেন?

উত্তর:


107

অন্য উত্তরগুলি দুর্দান্ত, নির্ভুল, বিশদযুক্ত, তবে আমি নিশ্চিত নই যে তারা "সাধারণ শব্দ" ধারণাটির খালি হাড়কে ব্যাখ্যা করছে যা প্রশ্নকারী খুঁজছিল।

আমি হুকগুলি এমন একটি বিন্দু হিসাবে ভাবি যেখানে কোডটি থেমে যায় এবং চিৎকার করে "" অন্য কেউ এখানে যোগ করার জন্য কিছু পেয়েছিল? "। যে কোনও মডিউলের একটি ফাংশন থাকতে পারে যা এর জবাব দেয় এবং কোডের সেই সময়ে উপযুক্ত ডেটা দিয়ে তা চালিত করে।

একটি দুর্দান্ত সোজা উদাহরণ হুক_নোড_ডিলেট () । যে কোনও মডিউল প্রতিটি নোড মোছার পরে জিনিসগুলি ঘটতে এটি ব্যবহার করতে পারে। দস্তাবেজগুলি আপনাকে বলবে যে এই হুকটি সেই মুছে ফেলা নোডের সাথে কাজ করার জন্য মডিউলটি পাস করে এবং অন্যান্য দরকারী তথ্যের রূপরেখা যেমন যেমন ডাকা হয় তার সঠিক সময় সম্পর্কে (যেমন এটি নোডের তথ্যটি ডাটাবেস থেকে মুছে ফেলার আগেই হয়) , এবং যেখানে দ্রুপালের কোডে হুককে ডাকা হয় (যা একাধিক জায়গায় হতে পারে)।

আপনি কী হুক বিদ্যমান তা অন্বেষণ করতে পারেন এবং দ্রুপাল এপিআইতে "হুক_" দিয়ে শুরু হওয়া জিনিসগুলি অন্বেষণ করে তাদের কাছে কী ডেটা প্রেরণ করা হয়েছে তা সন্ধান করতে পারেন ।

হুক একটি নাম কনভেনশন অনুসারে কাজ করে: hook_node_deleteআমাদের উদাহরণ হিসাবে ব্যবহার করে , যখন নোড মোছার প্রক্রিয়াটি হুক নামে ডাকে সেখানে পৌঁছে যায়, প্রতিটি মডিউলের জন্য এই জাতীয় ফাংশন সহ [modulename]_node_delete()যেখানে হুকের নাম হুক শব্দটি মডিউলটির নামের সাথে প্রতিস্থাপন করা হয় (উদাঃ my_amazing_module_node_delete()), functions ফাংশনগুলি কল হয়।

কেন? সুতরাং যে কোনও মডিউল এই মূল পয়েন্টগুলিতে কিছু করতে পারে: উদাহরণস্বরূপ আপনি মুছে ফেলা নোডের দিকে তাকান এবং কোনও নির্দিষ্ট শর্ত পূরণ করলে এটি কাজ করতে পারেন (বলুন, কোনও প্রশাসককে ইমেল করুন বা কিছু দীর্ঘ প্রক্রিয়া চালু করুন) launch

কিছু হুক আপনাকে প্রক্রিয়াজাত হওয়ার ঠিক আগে তৈরি হওয়া জিনিসগুলি পরিবর্তিত করতে দেয়। উদাহরণস্বরূপ, hook_menu_alter () সিস্টেমটি তৈরি করা বর্তমান মেনু আইটেমগুলি আপনাকে দেয়। যে কোনও মডিউল কোনও ফাংশনকে কিছু_মডিউলনেম_মেনু_াল্টার () সংজ্ঞায়িত করতে পারে এবং তাদের দিকে তাকান, allyচ্ছিকভাবে এগুলি পরিবর্তন করুন (কিছু মুছুন, কিছু সংযোজন করুন, বাছাই করুন ...), এবং নতুনভাবে পরিবর্তিত মেনুটি আবার পাস করতে পারেন।

এটি সহজ, সত্যই শক্তিশালী এবং ড্রুপাল কীভাবে একটি মডুলার সিস্টেম হিসাবে কাজ করে তার কেন্দ্রস্থলে। হুকগুলির প্রয়োগগুলি বেশিরভাগ দ্রুপাল মডিউলগুলির কেন্দ্রস্থলে থাকে।

একটি দ্রুপাল মডিউলের কোডটি সন্ধান করার সময়, আপনি হুকগুলি থেকে আসা কোন ক্রিয়াগুলি স্পষ্ট করতে পারেন (মডিউল কোডের মধ্যে কেবল যে ফাংশনগুলি কেবল বলা হয় তার বিপরীতে), কারণ দ্রুপাল সম্প্রদায় একটি কনভেনশন কার্যকর করে যার ফলে প্রতিটি হুকের বাস্তবায়ন হয় এর সামনে এই মত মন্তব্য করুন ("প্রয়োগকারী হুক _..." বিটটি নোট করুন):

/**
 * Implements hook_some_hook().
 *
 * Some descriptive summary of what this does
 */
function my_amazing_module_some_hook() {

কিছু মডিউল যা এপিআই হিসাবে কাজ করে তাদের নিজস্ব হুক সংজ্ঞায়িত করে। উদাহরণস্বরূপ, দেখেছে অনেক আঙ্গুলসমূহ আপনি যোগ পড়া এবং তৈরি অথবা একটি দৃশ্য প্রদর্শন করার প্রক্রিয়ার মধ্যে বিভিন্ন বিন্দুতে ডেটা পরিবর্তন বা সম্পাদনা করার অনুমতি দেয় সংজ্ঞায়িত করে। আপনি দুটি জায়গা থেকে কাস্টম মডিউলগুলিতে তৈরি হুক সম্পর্কে তথ্য পেতে পারেন (ধরে নিলেন মডিউলটি কনভেনশন অনুসরণ করে):

  • modulename.api.phpমডিউল ফোল্ডারে ফাইলের কোড এবং মন্তব্যসমূহ
  • drupalcontrib.org - উদাহরণস্বরূপ, তাদের ডি 7 মডিউলগুলির তালিকা এখানে রয়েছে যাদের তারা তথ্য রয়েছে এবং তাদের ভিউ হুকের পৃষ্ঠাটি এখানে রয়েছে

অন্যরা যেমন বুঝিয়েছিল, বুটস্ট্র্যাপিং হ'ল মূলত বুট আপ করা - আমি অন্য ভাল পরিষ্কার ব্যাখ্যাগুলি সদৃশ করব না।


53

হুকগুলি বেশিরভাগ দর্শনার্থীর বাস্তবায়ন এবং পর্যবেক্ষক নিদর্শন।

হুক বাস্তবায়নগুলির মধ্যে একটি সাধারণ হুক_মেনু যা মডিউলগুলিকে একটি দ্রুপাল সিস্টেমের মধ্যে নতুন পাথগুলি নিবন্ধ করার অনুমতি দেয়।

function my_module_menu() {
  return array('myawesomefrontpage' => array(
    'page callback' => 'function_that_will_render_frontpage'
  ));
}

দ্রুপালে খুব ঘন ঘন প্যাটার্নটিতে [DATATYPE]_infoহুক এবং একটি [DATATYPE]_info_alterহুক থাকে। আপনি যদি কোনও নতুন ক্ষেত্রের প্রকার তৈরি করতে চান তবে আপনি প্রাসঙ্গিক ফিল্ড_ইনফো- হুক বাস্তবায়ন করবেন এবং আপনি যদি বিদ্যমান কোনওটি নিয়ে পরিচালনা করতে চান তবে আপনি সংশ্লিষ্ট ফিল্ড_ইনফো_াল্টার- হুক বাস্তবায়ন করবেন।

সম্পাদনা: মন্তব্যগুলিতে Chx এর পয়েন্ট হিসাবে, পর্যবেক্ষক প্যাটার্নটি অবজেক্ট অরিয়েন্টেড, যা ড্রুপাল 7 এখনও বেশিরভাগই নয়। তবে একটি উইকি পৃষ্ঠা রয়েছে, একটি অবজেক্ট-ভিত্তিক দৃষ্টিভঙ্গি থেকে দ্রুপাল প্রোগ্রামিং (4 এপ্রিল, 2005 এ জোনজোবি দ্বারা নির্মিত) এটি ব্যাখ্যা করে যে ড্রুপাল কীভাবে এই সত্ত্বেও অবজেক্ট অরিয়েন্টেড কোড নিদর্শনগুলি ব্যবহার করে। এটি লক্ষ্য করা আকর্ষণীয় যে এতে পর্যবেক্ষকের কথা উল্লেখ রয়েছে তবে দর্শনার্থীরা নয়।

দ্রুপাল ৮-দ্রষ্টব্য এটি এখনও পূর্বের দিকে, এবং পরিবর্তনের সাপেক্ষে, তবে আমি যুক্ত করতে চাই যে হূকগুলি বেশ কিছু সময়ের জন্য দ্রুপালের সাথে কার্যকারিতা যুক্ত করার ক্ষেত্রে ডি-ফ্যাক্টো স্ট্যান্ডার্ড ছিল, প্লাগিনগুলির ধারণাটি আরও বেশি দৃশ্যমান হবে ড্রুপাল 8 এ, এবং আমাদের কোরের সাথে ইন্টারঅ্যাক্ট করার নতুন উপায়গুলি দেবে। প্রাসঙ্গিক ইস্যু , এবং ডকুমেন্টেশন


2
ওওপি ডিজাইনের ধরণগুলি দ্বারা বাঁশ করবেন না। এটি একটি নয়। ড্রুপাল হুকগুলি এওপি হয়। নিচে দেখ.

@ সিএইচএক্স, যদিও আমি নির্দ্বিধায় স্বীকার করি আপনি আমার চেয়ে ভাল জানেন :) এবং আপনার উত্তরটি সঠিক (আমি এটি ভোট দিয়েছি) আমি আমার উত্তরটি ভুল বলে ব্যাখ্যা করি না। :) আপনি যদি মতানৈক্য করেন তবে আমি শিখতে চাই যে আমি তাদের বাস্তবায়নের ধরণগুলি কীভাবে ভুল বুঝেছি।
লেথারিয়ন

4
উইকিপিডিয়া: "পর্যবেক্ষক প্যাটার্ন হ'ল একটি সফ্টওয়্যার ডিজাইনের প্যাটার্ন, যেখানে একটি বিষয়, যার নাম বিষয় বলা হয়, তার নির্ভরশীলদের একটি তালিকা বজায় রাখে, তাকে পর্যবেক্ষক বলা হয়" এখানে কোনও বস্তু ধারণকারী পর্যবেক্ষক নেই। দর্শনার্থী খাঁটি তবে একই জেনেরিক নীতিটি প্রযোজ্য: যা ওওপি নয় তা ওওপি ধরণ থাকতে পারে না।

33

সাধারণ ব্যক্তির ভাষায়, হুকগুলি হ'ল সেতুগুলি যা মডিউলগুলিকে একে অপরের সাথে যোগাযোগ করার, একে অপরের কাঠামো এবং ডেটা পরিবর্তন করতে, নতুন ডেটা সরবরাহ করার জন্য একটি উপায় সরবরাহ করে of

বেশিরভাগ ক্ষেত্রে, hook_ফাংশন নামের শব্দটি আপনার মডিউলটির নাম দ্বারা প্রতিস্থাপিত হয় এবং এটি আপনার মডিউলটিকে অন্য মডিউলটির ক্রিয়াকলাপে ট্যাপ করার জন্য একটি উপায় সরবরাহ করে। উদাহরণস্বরূপ "নোড" নামক একটি ড্রুপাল কোর মডিউল বিভিন্ন হুকের ডাক দেয়। এর মধ্যে একটি হ'ল hook_node_updateবিদ্যমান নোড আপডেট হওয়ার পরে প্রতিবারই অনুরোধ করা হয়। যখন এই হুকটি আহ্বান করা হয়, তখন আপনার মডিউলটির (আমরা এটি বলি mymodule) বাস্তবায়ন কল hook_node_updateকরা হয়, যা এই ক্ষেত্রে আপনার মডিউলের। মডুলাল ফাইলের একটি ফাংশন হবে mymodule_node_update(স্পষ্টতই এই ফাংশনটি আপনার মডিউলটির ফোল্ডারে কোনও ফাইলে থাকতে পারে) এটি। Module ফাইলের মধ্যে অন্তর্ভুক্ত)। এই হুকটি প্রয়োজনীয় প্যারামিটারগুলি (ভেরিয়েবল )ও পাস করা হবে যা এটি ব্যবহার করতে, সংশোধন করতে এবং / অথবা ফাংশনে ফিরে আসতে পারে যা হুকটি ডেকেছিল।

যখন আমি প্রথম দ্রুপাল শিখতে শুরু করলাম, আপনি এখন যেমন ছিলেন তেমন নৌকোয় ছিলাম, প্রথমে বুঝতে খুব অসুবিধা হয়েছিল তবে একবার আপনি এটি পেয়ে গেলে এটি ওহ এত সহজ এবং স্বজ্ঞাত। শুভকামনা।


1
আপনার উত্তরের জন্য থ্যাঙ্কস। আমাকে এতটা সাহায্য করুন। আপনি কি দয়া করে বলতে পারবেন যে ড্রুপালে বুটস্ট্র্যাপ ধারণাটি কী এবং হুকগুলি কীভাবে বুটস্ট্র্যাপিংয়ের সাথে সহজ কথায় ব্যবহার করা হয় পূর্ববর্তী উত্তরটি ব্যাখ্যা করার সাথে ..
জিআইএলএল

@ বায়াসা, দয়া করে এখানে আপনার নিজস্ব চিন্তাভাবনা প্রবেশ করুন। আমি শুধু আমার নিজের যুক্ত করছি। আপনি আপনার কম্পিউটার শুরু হিসাবে বুস্টারট্যাপিং সম্পর্কে ভাবতে পারেন। ড্রুপালের ডেটাবেস, ফাইল এবং ফর্ম সহ অনেকগুলি এপিআই রয়েছে। এগুলি একটি "প্ল্যাটফর্ম" এর উপর ভিত্তি করে। বুটস্ট্র্যাপের সময়, দ্রুপাল এই ফাংশনগুলি এবং অন্যান্য সেটিংস (ডাটাবেস সংযোগ, ফাইল ফোল্ডার ইত্যাদি) সংজ্ঞায়িত করে যাতে সিস্টেমের বাকি অংশগুলি বাকি থেকে চালিয়ে যেতে পারে।
আইশক

32

মূল বিকাশকারীদের মধ্যে কিছুক্ষণ আগে একটি নিবন্ধ লিখেছিলেন "অবজেক্ট-ভিত্তিক দৃষ্টিভঙ্গি থেকে দ্রুপাল প্রোগ্রামিং" । হুকগুলি সাধারণ ডিজাইনের অনেকগুলি নিদর্শন বাস্তবায়ন হিসাবে কীভাবে চিন্তা করা যেতে পারে তা বোঝাতে একটি ভাল কাজ করে । হুকের সেরা ব্যাখ্যাটি নিবন্ধ থেকে আসে:

ড্রুপালের হুক সিস্টেমটি এর ইন্টারফেস বিমূর্তনের জন্য ভিত্তি। হুকগুলি অপারেশনগুলি সংজ্ঞায়িত করে যা কোনও মডিউল বা তার দ্বারা সম্পাদন করা যায়। যদি কোনও মডিউল একটি হুক প্রয়োগ করে, এটি কোনও নির্দিষ্ট কার্য সম্পাদন করার জন্য চুক্তিতে প্রবেশ করে বা হুকের অনুরোধ করা হলে একটি নির্দিষ্ট ধরণের তথ্য ফেরত দেয়। কলিং কোডটিতে মডিউলটি বা হুকটি প্রয়োগের মাধ্যমে হুককে কার্যকরভাবে কার্যকর করার জন্য কীভাবে প্রয়োগ করা হয় সে সম্পর্কে কিছু জানা দরকার।


1
আমি অনুযায়ী যে প্রবন্ধের লেখকের সংশোধন drupal.org/node/19964

@ সিএক্স, ধন্যবাদ আমি এখন এই উত্তরটি মুছে ফেলার চিন্তা করছি। আমি এটি পোস্ট করেছিলাম / সি আমি প্লেইন সিতে প্রচুর ওও কাজ করতাম এবং ওও ধারণাগুলিতে ডাব্লু / ও রিয়েল অবজেক্টে অভ্যস্ত হয়েছি। যাইহোক, আপনি পয়েন্টকুট / তাঁত সম্পর্ক সম্পর্কে ঠিক বলেছেন। আমি নিশ্চিত নই, যদিও, উক্তিটি যদি কোনও দিকটির সঠিক বিবরণ হয় ("ইন্টারফেস বিমূর্তি" অংশ উপেক্ষা করে)।
এমপিডোনাদিও

21

বুটস্ট্র্যাপটি প্রক্রিয়াটি হ'ল দ্রুপাল একটি পৃষ্ঠা তৈরির জন্য যায়, মূলত সমস্ত মূল, থিম এবং মডিউল কোডের ক্রম অনুসারে।
এটি মূলত কীভাবে দ্রুপাল বুট হয় এবং এটি সিএমএস হিসাবে কাজ করার জন্য প্রস্তুত হয়।

এটি চতুর, এটি আমাদের মডিউল এবং থিমগুলির যে কোনও জায়গায় হুক রাখার অনুমতি দেয় এবং বুটস্ট্র্যাপ প্রক্রিয়াটি নিশ্চিত করে যে তারা সঠিক পয়েন্টে চালাচ্ছে।
উদাহরণস্বরূপ, যদি আপনি কোনও ফর্মটিতে একটি কাস্টম চেক-বাক্স যুক্ত করতে 'হুক_ফর্ম_ল্টার' ব্যবহার করেন, দ্রুপালের বুটস্ট্র্যাপ নিশ্চিত করবে যে এটি আপনার কোডটি রেন্ডার করার ঠিক আগে কোডটি চালাচ্ছে।

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

তবে সাধারণ দ্রুপাল পৃষ্ঠাগুলি রেন্ডার করার জন্য, বুটস্ট্র্যাপ প্রক্রিয়া দুর্দান্ত কাজ করে, এটি জিনিসগুলিকে গতি বাড়ানোর জন্য ড্রুপালস ক্যাচিং সিস্টেম ব্যবহার করে এবং আপনাকে আপনার সাইটের প্রতিটি অংশে সম্পূর্ণ নিয়ন্ত্রণ দেয়। আপনি যদি নিজের সাইটটিকে ধীর করে দেখেন তবে জিনিসগুলি দ্রুত করতে সহায়তা করতে আপনি সর্বদা এপিসি বা মেমক্যাশ জাতীয় কিছু ব্যবহার করতে পারেন।

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


15

বুটস্ট্র্যাপ হ'ল প্রক্রিয়া সেই সময় যা দ্রুপাল নিজেই সূচনা করে; প্রক্রিয়া আসলে অন্তর্ভুক্ত:

  • ত্রুটি সেট করা, এবং ব্যতিক্রম হ্যান্ডলারগুলি
  • এতে থাকা কয়েকটি নির্দিষ্ট-গ্লোবাল ভেরিয়েবলের মান শুরু করা $_SERVER
  • এর সাথে কিছু ভেরিয়েবল শুরু করা হচ্ছে init_set()
  • পরিবেশন করার জন্য পৃষ্ঠার ক্যাশেড সংস্করণ সন্ধান করা
  • ডাটাবেস আরম্ভ করা হচ্ছে
  • কোনও শ্রেণি বা কোনও ইন্টারফেস পাওয়া না গেলে ফাইলগুলি লোড করে এমন হ্যান্ডলারের সেট করা
  • ড্রুপাল ভেরিয়েবল শুরু করা হচ্ছে
  • পিএইচপি সেশন শুরু করা হচ্ছে
  • ভাষার পরিবর্তনশীল আরম্ভ করা
  • সক্ষম মডিউলগুলি লোড হচ্ছে

আমি বর্ণিত কিছু অপারেশন দ্রুপাল 7 বা ততোধিকের জন্য নির্দিষ্ট, তবে বেশিরভাগ ক্রিয়াকলাপ দ্রুপাল সংস্করণ থেকে স্বতন্ত্র।

একটি হুক একটি পিএইচপি ফাংশন যা কোনও কাজ করার প্রয়োজন হলে দ্রুপাল বা তৃতীয় পক্ষের মডিউলগুলি থেকে কল করা যেতে পারে। কল করার জন্য ফাংশনগুলির একটি পূর্বনির্ধারিত তালিকা না রেখে, তালিকাটি সক্ষম করা মডিউলগুলি এবং সেগুলি প্রয়োগ করে the
উদাহরণস্বরূপ, ড্রুপাল ব্যবহার করে hook_node_update(); নোড_সেভ () দিয়ে যখন কোনও নোড সংরক্ষণ করা হয় তখন নিম্নলিখিত কোডটি কার্যকর করা হয়।

// Call the node specific callback (if any). This can be
// node_invoke($node, 'insert') or
// node_invoke($node, 'update').
node_invoke($node, $op);

নোড_ইনভোক () কী করে তা নিম্নলিখিত:

  • সমস্ত সক্ষম মডিউলগুলির তালিকা পাওয়া
  • সক্ষম মডিউলগুলির কোনও ফাংশন রয়েছে কিনা পরীক্ষা করা হচ্ছে যার নাম "_নোড_আপডেট" এ শেষ হয় এবং মডিউলটির সংক্ষিপ্ত নাম দিয়ে শুরু হয়
  • সেই ফাংশনটি কল করা, $nodeপরামিতি হিসাবে পাস করা

হুকগুলি তাদের নিজস্ব ডেটাবেস একটি ডেটাবেসে সংরক্ষণ করতে পারে, বা কোনও ফাংশন থেকে ফিরে আসা মানকে পরিবর্তন করতে পারে। উদাহরণস্বরূপ, শেষ কেসটি হুক_ফর্ম_াল্টার () এর সাথে কী ঘটে , যা ড্রুপাল_প্রিপারে_ফর্ম () এর$form উল্লেখ হিসাবে পাসের মানকে পরিবর্তিত করে ।

ড্রুপাল হুক সাধারণত তিনটি ফাংশন ব্যবহার করে আহবান করা হয়:

drupal_alter()হুক_ফর্ম_াল্টার () , হুক_হুক_ইনফো_াল্টার () , এবং হুক_ টোকেন_লটার () এর মতো নির্দিষ্ট হুকের অনুরোধ জানাতে ব্যবহৃত ফাংশন যার উদ্দেশ্য হ'ল তথ্য তাদের রেফারেন্স হিসাবে পাস করেছে ।

অন্যান্য ফাংশন রয়েছে যা হুকগুলি আহ্বান করতে ব্যবহৃত হয়, যেমন node_invoke()but তবে এই ফাংশনগুলি মূলত আমি আগে তালিকাভুক্ত ফাংশনগুলির একটি ব্যবহার করি।


12

হুক্স হয় pointcuts এবং module_invoke_allWeaver (হায়রে আমরা বাস্তবায়ন স্পষ্ট নয় এবং অন্যান্য বয়ন ফাংশন হয়) হয়। আমি যতদূর জানি, দ্রুপাল হ'ল পিএইচপি ফাংশন সহ এওপি প্রয়োগ করার একমাত্র সিস্টেম ।

দ্রুপালে এওপি কীভাবে কাজ করে তার আরেকটি ব্যাখ্যা দেখুন ?


আপনি কি মনে করেন ঝোডড্ডনের নিবন্ধটি (আমার উত্তরে উল্লিখিত) সঠিক?
এমপিডোনাদিও

2
এটি 2005 সালের জোনববের নিবন্ধটি এ্যাট্রিবিউশনটি ভুল। আমি এটা নিয়ে বিতর্ক করব, হ্যাঁ।

6

আপনি যদি হুকগুলি দেখতে চান ড্রুপাল আপনাকে কল করতে দেয় , api.drupal.org এ যান , অনুসন্ধান বাক্সে ট্যাব করুন এবং 'হুক_' টাইপ করুন। এটি আপনাকে দ্রুপাল দ্বারা সংজ্ঞায়িত বেশিরভাগ হুকের একটি বৃহত তালিকা দেবে। '_ল্টার' এর জন্য একই জিনিস করুন এবং আরও দেখুন।

নোড এপিআই হুক্স পৃষ্ঠা সব আঙ্গুলসমূহ নোড অভিযানের সময় প্রার্থনা একটি কালানুক্রমিক তালিকা উপলব্ধ করা হয়। আপনি নোড মডিউল এবং সত্তা এবং ক্ষেত্র সিস্টেমগুলি একে অপরের দিকে হুকিং দেওয়ার সময় দেখতে পাচ্ছেন।

উদাহরণস্বরূপ, যদি আপনি নীচে স্ক্রোল করেন এবং এর জন্য বিভাগটি দেখুন node_load(): নোড মডিউল আপনাকে একটি হুক_লোড () দেবে এবং তারপরে কিছু ক্ষেত্র লোড করা সত্তা সিস্টেমে নিয়ন্ত্রণ সরবরাহ করবে। ফিল্ড হুকের একটি সম্পূর্ণ হোস্ট তালিকাভুক্ত নয়, এবং তারপরে যখন সত্তা সিস্টেমটি hook_entity_load()শেষ হয় তখন নোডের কাছে নিয়ন্ত্রণটি ফিরে যাওয়ার আগে যা অনুরোধ করে hook_node_load()

এটি আপনার কোডটি প্রশ্নযুক্ত নোডে লোড হওয়ার সাথে সাথে টুকরো টুকরো করে কাজ করার সুযোগ দেয়। এই হুকগুলি শিখতে এবং কখন এবং কেন তাদের ডাকা হয় তা ড্রুপাল কোডিংয়ের সাহসিকতার অংশ। :-)

অন্যান্য সিস্টেমেও হুক রয়েছে। যেমন hook_init()এবং hook_boot()। এটি আপনার প্রশ্নের বুটস্ট্র্যাপ অংশে পৌঁছেছে। hook_boot()ক্যাচিং সিস্টেমটি লোড হওয়ার আগে দ্রুপাল দ্বারা ডাকে। সুতরাং ড্রুপাল সত্যিই শুরু হওয়ার আগে যদি আপনার মডিউলটি কিছু করার দরকার পড়ে এবং আপনি যদি ক্যাশে নির্বিশেষে আপনার কোডটি চালিত করতে চান তবে আপনি প্রয়োগ করতে পারবেন hook_boot()। অন্যথায়, আপনি কেবল ক্যাশেড নয় এমন পৃষ্ঠাগুলি সম্পর্কে যদি যত্নশীল হন তবে আপনি প্রয়োগ করতে পারেন hook_init()

এটি আপনাকে লোডিং প্রক্রিয়া শুরুর আগে কোনও কিছু বাস্তবায়নের বিকল্প দেয়, দ্রুপাল সম্পূর্ণরূপে বুট করার আগে, আপনাকে কিছুটা নমনীয়তা দেয় যে প্রক্রিয়ায় আপনি কোন বিন্দুতে বাধা দিতে চান।

আপনার যদি নিশ্চিত হওয়া দরকার যে ড্রুপাল কোনও নির্দিষ্ট বিন্দুতে বুট হয়েছে কিনা এগিয়ে যাওয়ার আগে আপনি কল করতে পারেন drupal_bootstrap()। আপনি যদি সেই ডকুমেন্টেশনে ক্লিক করেন তবে কিছুই থেকে শুরু করে বুটস্ট্র্যাপের স্তরগুলি উপলব্ধ।

এবং, পরিশেষে, আপনি উদাহরণ প্রকল্পে যে কোনও প্রদত্ত সাবসিস্টেমের জন্য কিছু বিস্তৃতভাবে ডকুমেন্ট কোড দেখতে পারেন ।


ওপি হুকের সংজ্ঞা চেয়েছে, দ্রুপালের ব্যবহৃত হুকের তালিকা নয়।
কিমলালুনো

6

হুকগুলি পিএইচপি ফাংশন, নামকরণ কনভেনশনগুলির ভিত্তিতে ব্লকগুলি বিল্ডিং "আপনার মডেলনেম_হুকনাম", এগুলি মডিউল তৈরির বিকাশকারীদের দক্ষতা সহজ করার জন্য ।

মডিউলগুলি হ'ল আসল চুক্তি কারণ তারা আপনার ড্রুপাল সিস্টেমে কোরি এবং কাস্টম উভয় কার্যকারিতা সক্ষম করে। সুতরাং, মডিউল তৈরি হয় আঙ্গুলসমূহ , এবং যখন একটি মডিউল আপনার Drupal এর সক্রিয়, ইনস্টল তার আঙ্গুলসমূহ ফাংশন থেকে module.inc ফাংশন অন্যদের মডিউল ধন্যবাদ বলা যেতে পারে module_invoke_all ($ হুক) বা module_invoke।

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

উপরে বর্ণিত বিকাশকারীদের জন্য ড্রুপালের কয়েকটি দরকারী উদাহরণ এখানে রয়েছে:

block_example মডিউলে হুক_ব্লক_ভিউ () বাস্তবায়ন উদাহরণ

/**
 * @file examples/block_example/block_example.module line 127
 *
 * Implements hook_block_view().
 *
 * This hook generates the contents of the blocks themselves.
 */
function block_example_block_view($delta = '') {
  //The $delta parameter tells us which block is being requested.
  switch ($delta) {
    case 'example_configurable_text':
      // The subject is displayed at the top of the block. Note that it
      // should be passed through t() for translation. The title configured
      // for the block using Drupal UI supercedes this one.
      $block['subject'] = t('Title of first block (example_configurable_text)');

এই হুকটি আপনাকে নিজের ওয়েবসাইটে কাস্টম ব্লক প্রদর্শনের জন্য দ্রুপালের ব্লক তৈরির অ্যাক্সেস দেয়। এটি সম্ভব কারণ কারণ block.module এর একটি _ block_render_ block ফাংশন রয়েছে যা সমস্ত মডিউলকে তাদের হুক_ব্লক ভিউ সংজ্ঞায়িত করতে সক্ষম করে (মডিউলটি_পরে শেষ পংক্তিতে লক্ষ্য করুন):

/**
 * @file modules/block/block.module, line 838
 *
 * Render the content and subject for a set of blocks.
 *
 * @param $region_blocks
 *   An array of block objects such as returned for one region by _block_load_blocks().
 *
 * @return
 *   An array of visible blocks as expected by drupal_render().
 */
function _block_render_blocks($region_blocks) {
  ...
  foreach ($region_blocks as $key => $block) {
    ...
    $array = module_invoke($block->module, 'block_view', $block->delta);

হ্যান্ড_মেনু () বাস্তবায়ন উদাহরণ রেন্ডার_এক্সেমাল মডিউলে

/**
 * @file examples/render_example/render_example.module line 22
 * 
 * Implements hook_menu().
 */
function render_example_menu() {
  ...
  $items['examples/render_example/arrays'] = array(
    'title' => 'Render array examples',
    'page callback' => 'render_example_arrays',
    'access callback' => TRUE,
  );

এই হুকটি দ্রুপালের ইউআরএল রাউটিং সিস্টেমের সাথে যুক্ত এবং আপনার মডিউল দ্বারা ব্যবহৃত রেন্ডার কলব্যাকগুলির সাথে ইউআরএল নিদর্শনগুলি সংজ্ঞায়িত করে। এটি system.module থেকে আহবান করা হয়েছে

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

ওয়েব পৃষ্ঠার প্রদর্শন সম্পর্কিত, দ্রুপালের ওয়েবসাইট এইচটিএমএল প্রদর্শন বেশিরভাগ ক্ষেত্রে অ্যারে এবং থেরিংয়ের মাধ্যমে অর্জিত হয় ।


3

যে কোনও জায়গায় মডিউল কল করে মডিউল_আইপ্লিমেন্টস () http://api.drupal.org/api/drupal/includes%21module.inc/function/module_implements/7 দ্রুপাল তাদের ওজনের উপর ভিত্তি করে সঠিক ক্রমে সঠিক নামযুক্ত ফাংশনগুলিকে সরিয়ে দেবে। এগুলিকে হুক ফাংশন বলা হয় কারণ মডিউলগুলির নথিতে যে মডিউলগুলি ব্যবহার করে আপনি হুক_মেনুর মতো জিনিস দেখতে পান (যখন মেনুটি মেনু আইটেমগুলি ফিরিয়ে আনার জন্য তৈরি সমস্ত ফাংশনকে কল করে)। "হুক" শব্দটি কেবলমাত্র প্রয়োগকারী মডিউলের নামের সাথে প্রতিস্থাপন করা দরকার এবং ড্রুপাল বাকী অংশটি করেন।

এখানে একটি ড্রুপাল_এল্টার () ফাংশনও রয়েছে যা সমস্ত সঠিকভাবে নামকরণকারী অলটার ফাংশনগুলিকে আগুন ধরিয়ে দেয়, আপনাকে অন্য যে কোনও হুক দ্বারা নিবন্ধিতকৃত জিনিসগুলিকে পরিবর্তন করতে দেয় সেই উদ্দেশ্য নিয়ে।

সাধারণত পরিবর্তনগুলি রেফারেন্সের মাধ্যমে তর্কগুলিতে পাস হবে যাতে আপনি সরাসরি বস্তুটি সম্পাদনা করতে পারেন, "নরমাল" হুক সাধারণত আপনাকে নতুন জিনিস ফিরিয়ে আনতে দেয়।

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

অনুশীলনে হুকগুলি সাধারণত ব্যবহৃত হয়:

  • ইভেন্টের প্রতিক্রিয়া যেমন হুক_উসার_লগিন বলা হয় যখন কোনও ব্যবহারকারী লগ ইন করে
  • হুক_মেনুর মতো সিস্টেমকে প্রসারিত করতে নতুন কিছু নিবন্ধভুক্ত করুন
  • থিম / html রেন্ডার বা বিল্ড / বৈধকরণ / ফর্ম জমা দিন

1

আপনার উপরে উপরে অনেক উত্তর রয়েছে তবে আমি হুকগুলির পিছনে থাকা খুব প্রাথমিক ধারণাটি বোঝার জন্য খুব সহজ উপায়ে একটি উত্তর দিতে চাই। হুকগুলি আসলে বিভিন্ন জিনিস পরিচালনা করার জন্য ড্রুপাল কোরে ফাংশনগুলিতে নির্মিত হয় এবং মূলত বিভিন্ন কাজ সম্পন্ন করে, আপনি নিজের নিজস্ব ফাংশনগুলিতে বিভিন্ন হুককে কল করে তাদের কার্যকারিতা যুক্ত করার জন্য আপনার নিজের ফাংশনগুলি সিঙ্ক্রোনাইজ করতে পারেন।

আমি আশা করি আপনি পয়েন্ট পাবেন!


1

হুকস এবং কোর (ডি 7) এর কথা এলে আমার কাছে এটি সমস্ত মডিউল_আইপ্লিমেন্ট ফাংশন সম্পর্কে। একটি জিনিস যা আমি বুঝতে গুরুত্বপূর্ণ বলে মনে করি তা হল যে কোনও কিছু সংশোধন করার জন্য একটি হুক লিখে আপনি যেভাবে ডেটা স্ট্রাকচারের সাথে লেনদেন করছেন তাতে কী ঘটেছিল তাতে আপনার সর্বশেষে শেষ কথা বলা উচিত নয়। আপনার হুক কেবল ফাংশনগুলির লাইন (কাতারে) যায় যা একই ডাটা স্ট্রাকচারের উপর অভিনয় করে সেগুলি মেনু, মেনু_লিঙ্কস, ব্লক, নোড, ব্যবহারকারী বা কোনও সত্তা বা কোনও উপাদান রেন্ডার কিনা।

সুতরাং আপনার হুকগুলি সত্যিকারের প্রত্যাশিত ফ্যাশনে ব্যবহৃত হয়েছে তা দেখতে আপনি (আপনার হুক) কোথায় লাইনে দাঁড়িয়েছেন তা জানতে বা সচেতন হওয়া দরকার। এটি আপনার মন্ডুলের ওজন দ্বারা নির্ধারিত হয়। ড্রুপাল কোর কেবলমাত্র আরোহণের ওজন ক্রম এবং সঠিকভাবে নামযুক্ত হুকগুলিকে ডেকে আনা যা ডেটায় যা ঘটে তা ঘটে।

আমি এর আগে হুকস লিখেছিলাম যে তার কোনও প্রভাব ছিল না, কেবলমাত্র আমার মডিউলটির ওজন খুব হালকা এবং উপ-পরবর্তী হুকগুলি কার্যকরভাবে আমি যা করেছি তা করছিল না বা সম্পূর্ণরূপে এটি উপেক্ষা করে একত্রে হেডব্যাং করার কয়েক ঘন্টা পরে শিখলাম।

একটি ভাল লিখিত হুক "ম্যান-হ্যান্ডেল" বা "জোর করে" নিজেকে শেষ হিসাবে রাখবে না তবে তারা "অন্যের সাথে ভাল লাগবে" নিশ্চিত করে নিশ্চিত করবে যে তারা বাকী রেখার নীচে হুকের দ্বারা প্রত্যাশা অনুযায়ী ডেটা কাঠামো বজায় রেখেছে।

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


1

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

উদাহরণ: আপনি একটি বাসের টিকিট বুকিংয়ের জন্য একটি মডিউল তৈরি করেছেন। আপনার কোড অনুসারে যদি টিকিটটি একবার বুকিং হয়ে যায় তবে সেই প্রকল্পের জন্য আপনার প্রয়োজনীয় অবস্থানটি গ্রহণযোগ্য নয়। মনে করুন আপনার ব্যাক্তিকে পিকআপের অবস্থান পরিবর্তন করতে পারে এমন ব্যতিক্রম ব্যতীত অনুরূপ প্রয়োজনীয়তার জন্য একই মডিউলটি প্রয়োজন। কোনওভাবে তাকে আপনার মডিউলটি ব্যবহার করতে হবে এবং আপনি কোনও কোড পরিবর্তন করতে চান না। সুতরাং আপনি একটি ইন্টারফেস সরবরাহ করুন (আমাদের ক্ষেত্রে হুক) যেখানে তিনি আপনার মডিউলটি পরিবর্তন না করেই তার পরিবর্তনগুলি প্রয়োগ করতে পারেন।

ড্রুপাল-এ ড্রুপাল-7 পর্যন্ত আমাদের কাছে মডিউলগুলির পাশাপাশি থিমগুলির হুক রয়েছে। হুক চেক কীভাবে কাজ করে তা জানতে কাস্টম হুক তৈরি করতে drupal.org হুক হয় এই লিঙ্কটি দেখুন check


0

হুক্স। মডিউলগুলিকে ড্রুপাল কোরের সাথে ইন্টারঅ্যাক্ট করার অনুমতি দিন। দ্রুপালের মডিউল সিস্টেম "হুকস" ধারণার উপর ভিত্তি করে। একটি হুক একটি পিএইচপি ফাংশন যা foo_bar () নামকরণ করা হয়, যেখানে "foo" মডিউলটির নাম (যার ফাইল নাম এইভাবে foo.module) এবং "বার" হুকটির নাম।

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