কখনও কখনও যখন আমি একটি হুক প্রয়োগ করার চেষ্টা করি তখন বুঝতে পারি এটি মডিউল ফাইলে থাকার কথা।
কোনও থিমের টেমপ্লেট.এফপি ফাইল বা মডিউলে একটিতে কী হুক প্রয়োগ করা যেতে পারে তা জানার কোনও উপায় আছে?
কখনও কখনও যখন আমি একটি হুক প্রয়োগ করার চেষ্টা করি তখন বুঝতে পারি এটি মডিউল ফাইলে থাকার কথা।
কোনও থিমের টেমপ্লেট.এফপি ফাইল বা মডিউলে একটিতে কী হুক প্রয়োগ করা যেতে পারে তা জানার কোনও উপায় আছে?
উত্তর:
সাধারণভাবে বলতে গেলে, শুধুমাত্র পরিবর্তিত হুকগুলি থিম দ্বারা প্রয়োগ করা যেতে পারে, যার অর্থ হুকগুলি হ'ল hook_form_alter()
এবং হ'ল hook_menu_alter()
সংক্ষেপে drupal_alter()
দ্রুপাল and এবং নিম্নে ( ModuleHandler()::alter()
বা ThemeManager::alter()
দ্রুপাল ৮) এর মাধ্যমে আহ্বান করা সমস্ত হুক ।
অন্যান্য হুকগুলি, যা module_invoke_all()
( ModuleHandler::invokeAll()
দ্রুপাল 8 এ) দ্বারা আহ্বান করা হয়েছে , কেবল থিমগুলির জন্য অনুরোধ করবেন না কারণ বর্তমানে সক্রিয় থিমটি কোনও হুক সংজ্ঞায়িত করে কিনা তা কোড পরীক্ষা করে না।
foreach (module_implements($hook) as $module) {
$function = $module . '_' . $hook;
if (function_exists($function)) {
$result = call_user_func_array($function, $args);
if (isset($result) && is_array($result)) {
$return = array_merge_recursive($return, $result);
}
elseif (isset($result)) {
$return[] = $result;
}
}
}
ড্রুপাল ৮-এ, যেখানে ModuleHandler
ক্লাসটি মডিউলগুলি থেকে বাস্তবায়িত হুকগুলি আহ্বান করে এবং ThemeManager
ক্লাস থিমগুলি দ্বারা বাস্তবায়িত হুকগুলি আহ্বান করে, কেবল প্রথম শ্রেণীর প্রয়োগসমূহ invoke()
এবং invokeAll()
। এর অর্থ এই যে ড্রুপাল 8 থিম হুকগুলিকে দ্রুপাল কোর দ্বারা চালিত করা হয়নি।
এটি ড্রুপাল কোর হুকগুলির জন্য বৈধ এবং বেশিরভাগ হুক তৃতীয় পক্ষের মডিউল দ্বারা ব্যবহৃত। হুক একটি থিম দ্বারা প্রয়োগ করা হয়েছে যাচাই করার জন্য এটি একটি মডিউল অবধি রয়েছে এবং এটির অনুরোধ জানায়। ভিউজ মডিউলটি এটি করে।
// Let modules modify the view just prior to rendering it.
foreach (module_implements('views_pre_render') as $module) {
$function = $module . '_views_pre_render';
$function($this);
}
// Let the themes play too, because pre render is a very themey thing.
foreach ($GLOBALS['base_theme_info'] as $base) {
$function = $base->name . '_views_pre_render';
if (function_exists($function)) {
$function($this);
}
}
$function = $GLOBALS['theme'] . '_views_pre_render';
if (function_exists($function)) {
$function($this);
}
তৃতীয় পক্ষের মডিউলগুলির দ্বারা ব্যবহৃত হুকগুলির জন্য, আপনাকে অনুরোধ করতে ব্যবহৃত কোডটি পরীক্ষা করতে হবে। সম্ভাবনা হ'ল থিমগুলির জন্য কেবল পরিবর্তিত হুকগুলিই আহ্বান জানানো হয়েছে তবে কিছু ক্ষেত্রে থিমগুলি দ্বারা অন্যান্য হুক প্রয়োগ করা যেতে পারে।
মনে রাখবেন যে থিমগুলির ক্ষেত্রে, সমস্ত সক্ষম থিমগুলি মডিউলগুলির সাথে বিপরীত হুক বাস্তবায়নের জন্য পরীক্ষা করা হয় না। ভিউ মডিউল থেকে সম্পন্ন হিসাবে কেবল বর্তমানে ব্যবহৃত থিম এবং বেস থিমগুলি পরীক্ষা করা হয়।
theme()
) শুরু করা হয়েছে। যদি এটি আরম্ভ না করা হয় তবে কোনও থিমের কোনও পরিবর্তিত হুক কার্যকর করা হবে না।
theme()
পৃষ্ঠার জন্য ব্যবহৃত থিম পরিবর্তন করে না, তবে এটি ডেটা রেন্ডার করার জন্য একটি ফাংশনকে আহ্বান করে। এটি থিম পরিবর্তন করে না, উদাহরণস্বরূপ, গারল্যান্ড থেকে মিনেলিতে।
drupal_alter()
দেখতে পাবেন যে এটি কেবল থিমটিতে পরিবর্তিত হুকের drupal_theme_initialize()
আগেই ডাকা হয়েছিল। যদি এটি না হয় তবে কোনও সক্রিয় থিম (এখনও) নেই এবং এইভাবে কোনও হুক বলা হয় না। কমপক্ষে ডি 7- drupal_theme_initialize()
তে কোনও অনুরোধে প্রথমবার বলা হয় তখন কোনও গ্যারান্টি নেই ।