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
इसके लिए बहुत सारे उदाहरण हैं। Drupal रूट निर्देशिका से drupal_get_form के लिए एक grep चलाएँ।
शिवजी

जवाबों:


33

बस $varsदूसरे तर्क के रूप में जोड़ें ।

drupal_get_form('new_form', $vars);

तथा...

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

Drupal_get_form से उद्धरण ()

... ड्रुपल_गेटफॉर्म () द्वारा अनूठे फॉर्म कंस्ट्रक्टर फ़ंक्शन सहित कार्यों के लिए कोई अतिरिक्त तर्क दिया जाता है। उदाहरण के लिए, नोड_एडिट फॉर्म के लिए यह आवश्यक है कि नोड ऑब्जेक्ट को यहां कहा जाता है जब इसे कहा जाता है। ये array_ formate_state ['build_info'] ['args'] के रूप में hook_form_alter () और hook_form_FORM_ID_alter () के कार्यान्वयन के लिए उपलब्ध हैं।


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;
}

बाकी जो आपको चाहिए वह फॉर्म एपीआई संदर्भ में है


इस फ़ंक्शन का उपयोग drupal_build_form () के बजाय किया जाना चाहिए, जब $ form_state की आवश्यकता नहीं होती है (अर्थात, जब प्रारंभ में प्रपत्र प्रदान किया जाता है) और अक्सर मेनू कॉलबैक के रूप में उपयोग किया जाता है। api.drupal.org/api/drupal/includes -form.inc/function/…
khaled_webdev

0

मेरे पास एक समान मुद्दा था और इसे @ कलाब्रो के उत्तर और इससे निपटने के अपने तरीके के मिश्रण के साथ हल किया गया था।

तो मूल रूप से मेरे पास एक स्थिर लैंडिंग पृष्ठ है जहां मैं टोकन का उपयोग करता हूं। में hook_tokensमैं रजिस्टर फॉर्म के माध्यम से कॉल करता हूं $form = drupal_get_form('user_register_form', 'register-test');

और अंत में hook_form_alter में मैं जांचता हूं कि क्या स्ट्रिंग "रजिस्टर-टेस्ट" है। इसके माध्यम से किया जाता है $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['...
  }
...
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.