hook_for_alter মৃত্যুদন্ড কার্যকর করার আদেশ


10

মডিউলের ওজন পরিবর্তন না করে বা দ্রুপাল কোরকে হ্যাক না করে ড্রুপাল 7-এ হুক_ফরম_্যালটারের মৃত্যুদন্ড কার্যকর করার কোনও উপায় কী আছে?

আমি উপাদান যোগ পরিবর্তন করার চেষ্টা করছি translation_form_node_form_alter অনুবাদ মডিউল থেকে। ফর্মটি ডিবাগ করার সময় আমি উপাদানটি খুঁজে পাচ্ছি না তাই আমি ধরে নিই অনুবাদ মডিউলের কোনওটি আগে আমার হুক কার্যকর করা হচ্ছে।

উত্তর:


2

আমি তাই মনে করি না. আমি বিশ্বাস করি যে translation_form_node_form_alter()প্রয়োগগুলি পরেhook_form_BASE_FORM_ID_alter() ডাকা হয় hook_form_alter() , তাই মডিউল ওজন পরিবর্তন করাও যথেষ্ট হবে না। আমি মনে করি আপনার দুটি বিকল্প হ'ল একটি ব্যবহার করা hook_form_BASE_FORM_ID_alter()এবং এটি নিশ্চিত করা যে আপনার পর্যাপ্ত পরিমাণ মডিউল ওজন রয়েছে, বা ব্যবহার করুন hook_form_FORM_ID_alter()(যদি সম্ভব হয়)।


হুক_ফর্ম_এফএআরএম_আইডি_এলটার () হুক_ফর্ম_ল্টার () এর পরে ফোন করা হয়েছে
— iStryker

হুক_ফর্ম_ফর্ম_আইডি_াল্টার এবং মডিউল ওজন ব্যবহার করে এটি সমাধান করুন।
— বার্ট

@ বার্ট যদি আপনি ব্যবহার করেন hook_form_FORM_ID_alter()তবে আমার বোঝা হ'ল আপনার ওজনটি কোনওরকম পরিবর্তন করার দরকার নেই (কারণ সমস্ত hook_form_FORM_ID_alter()কল সব পরে করা হয় hook_form_BASE_FORM_ID_alter())।
— অ্যান্ডি

@ অ্যান্ডি, আমি ওজন সামঞ্জস্য না করে যদি foo_for_page_node_for_alter ব্যবহার করি তবে এটি কাজ করবে বলে মনে হচ্ছে না।
— বার্ট

1
@Bart আমি উৎস আপনি ঐ বিস্তারিত দিতে করতে খুঁজছি ছিল - নীচে খুঁজে বার করো drupal_prepare_form()এবং drupal_alter()। আমি ইতিমধ্যে লক্ষ করেছি যে দস্তাবেজগুলি বন্ধ মনে হয়েছে, তাই আমি একটি সমস্যা তৈরি করেছি । ডুনো কেন এটি আপনার জন্য সিস্টেম ওজন পরিবর্তন না করে কাজ করে না!
— অ্যান্ডি

17

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

এটি করা কতটা সহজ তা দেখায় এপিআই ডক্সের নমুনা কোড:

<?php
function hook_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'rdf_mapping') {
    // Move my_module_rdf_mapping() to the end of the list. module_implements()
    // iterates through $implementations with a foreach loop which PHP iterates
    // in the order that the items were added, so to move an item to the end of
    // the array, we remove it and then add it.
    $group = $implementations['my_module'];
    unset($implementations['my_module']);
    $implementations['my_module'] = $group;
  }
}
?>

আমি এই সঠিক কোডটি দিয়ে আমার হুকটি সর্বশেষে কার্যকর করতে সক্ষম হয়েছি। ধন্যবাদ!
— Beau

4

এখানে আপনার হুক_ফর্ম_লটারকে অন্য মডিউল হুক_ফর্ম_লটারের পরে ডাকা হবে তা নিশ্চিত করার পদ্ধতিটি এখানে রয়েছে:

/**
 * Implements hook_form_alter().
 */
function my_module_form_alter(&$form, &$form_state, $form_id) {
  // do your stuff
}

/**
 * Implements hook_module_implements_alter().
 *
 * Make sure that our form alter is called AFTER the same hook provided in xxx
 */
function my_module_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'form_alter') {
    // Move my_module_rdf_mapping() to the end of the list. module_implements()
    // iterates through $implementations with a foreach loop which PHP iterates
    // in the order that the items were added, so to move an item to the end of
    // the array, we remove it and then add it.
    $group = $implementations['my_module'];
    unset($implementations['my_module']);
    $implementations['my_module'] = $group;
  }
}

অন্যান্য মডিউল যখন প্রকরণে একটি ফর্ম_ল্টার হুক সরবরাহ করে তখন এটিও কাজ করে: হুক_ফর্ম_এফএআরএম_আইডি_ল্টার। (তারা এটিকে ডকুমেন্টেশনে ব্যাখ্যা করেছেন: হুক_মডিউল_আইপ্লিমেন্টস_ল্টার )।

আমি জানি যে এই পোস্টটি wiifm এর পোস্টের সাথে বেশ সমান, তবে হুক_ফর্ম_ল্টারের সাথে উদাহরণ সহ এটি কার্যকর মনে করেছে


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