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.