Drupal_get_form () এ আর্গুমেন্ট পাস করা হচ্ছে


19

drupal_get_form()ড্রুপাল 7-এ আমি কীভাবে যুক্তিগুলি পাস করতে পারি ?

function new_menu_callback() {
  $vars = some_example_function(); // returns: array(1 => 'one', 2 => 'two');
  $output = $vars[2];
  $output .= drupal_render(drupal_get_form('new_form'));
}

function new_form($form, &$form_state) {
  // How can I access $vars[1] from new_menu_callback() here?
}

4
এর জন্য প্রচুর উদাহরণ রয়েছে। ড্রুপাল রুট ডিরেক্টরি থেকে ড্রুপাল_গেট_ফর্মের জন্য একটি গ্রেপ চালান।
শিভাজি

উত্তর:


33

কেবল $varsদ্বিতীয় যুক্তি হিসাবে যুক্ত করুন ।

drupal_get_form('new_form', $vars);

এবং...

function new_form($form, &$form_state, $vars) {
// ...

দ্রুপাল_গেট_ফর্ম () থেকে উদ্ধৃতি

... অনন্য ফর্ম কনস্ট্রাক্টর ফাংশন সহ drupal_get_form () দ্বারা ডাকা ফাংশনগুলিতে কোনও অতিরিক্ত যুক্তি দেওয়া হয়। উদাহরণস্বরূপ, নোড_এডিট ফর্মের জন্য নোড অবজেক্টটি যখন ডাকা হয় তখন এখানে প্রবেশ করানো উচিত। এগুলি হুক_ফর্ম_ল্টার () এবং হুক_ফর্ম_এফএআরএম_আইডি_এল্টার () অ্যারে $ ফর্ম_স্টেট ['বিল্ড_ইনফো'] ['আরগস'] হিসাবে বাস্তবায়নের জন্য উপলব্ধ।


3

আপনি যে অতিরিক্ত যুক্তি পাঠিয়েছেন drupal_get_form()সেগুলি উপলভ্য $form_state['build_info']['args'], তবে আপনার মধ্যে ফাংশন কল থাকতে পারে না page arguments। আমি নিম্নলিখিত পদ্ধতির পরামর্শ দেব:

function mymodule_menu() {
    $items = array();
    $items['mymodule/example'] = array(
      'page callback' => 'drupal_get_form',
      'page arguments' => array('mymodule_form'),
    );
    return $items;
}


function mymodule_form($form, &$form_state) {
  // this function now uses dev/user friendly named keys
  $vars = mymodule_example_function();
  $form = array();

  $form['heading'] = array(
    '#markup' => check_plain($vars['heading']),
  );

  // use other arguments here

  return $form;
}

আপনার যা প্রয়োজন তা বাকি ফর্ম এপিআই রেফারেন্সে


এই ফাংশনটি যখন $ ফর্ম_স্টেটের প্রয়োজন হয় না (যেমন প্রাথমিকভাবে ফর্মটি রেন্ডার করার সময়) প্রয়োজন হয় না এবং ড্রপাল_বিল্ড_ফর্ম () এর পরিবর্তে ব্যবহার করা উচিত এবং প্রায়শই মেনু কলব্যাক হিসাবে ব্যবহৃত হয়। api.drupal.org/api/drupal/includes!form.inc/function/…
খালেদ_ভেদেব

0

আমার একটি অনুরূপ সমস্যা ছিল এবং এটি @ কলাব্রোর উত্তর এবং এটির মোকাবিলার নিজস্ব উপায়ের মিশ্রণ দিয়ে সমাধান করা হয়েছে।

সুতরাং মূলত আমার একটি স্থিতিশীল ল্যান্ডিংপেজ রয়েছে যেখানে আমি টোকেন ব্যবহার করি। ইন hook_tokensআমি মাধ্যমে রেজিস্টার ফর্ম কল $form = drupal_get_form('user_register_form', 'register-test');

এবং পরিশেষে হুক_ফর্ম_ল্টারে আমি স্ট্রিংটি "নিবন্ধ-পরীক্ষা" কিনা তা পরীক্ষা করে দেখি। এটি মাধ্যমে সম্পন্ন হয় $form_state['build_info']['args'][0]। এখানে ফাংশন:

function hook_form_user_register_form_alter(&$form, &$form_state, $form_id) {
...
if ($form_state['build_info']['args'][0] == 'register-test') {
    // manipulate the form as usual
    $form['...
  }
...
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.