Drupal_get_form () öğesine argümanlar iletme


19

drupal_get_form()Drupal 7'de nasıl argüman aktarabilirim ?

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
Bunun için birçok örnek var. Drupal kök dizininden drupal_get_form için bir grep çalıştırın.
Sivaji

Yanıtlar:


33

Sadece $varsikinci argüman olarak ekleyin .

drupal_get_form('new_form', $vars);

ve...

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

Alıntı drupal_get_form ()

... Ek argümanlar, benzersiz form yapıcı işlevi de dahil olmak üzere drupal_get_form () tarafından çağrılan işlevlere iletilir. Örneğin, node_edit formu, bir düğüm nesnesinin çağrıldığında buraya iletilmesini gerektirir. Bunlar, hook_form_alter () ve hook_form_FORM_ID_alter () uygulamalarının $ form_state ['build_info'] ['args'] dizisi olarak kullanılabilir.


3

İlettiğiniz ek argümanlar drupal_get_form()kullanılabilir $form_state['build_info']['args'], ancak cihazınızda işlev çağrıları olamaz page arguments. Aşağıdaki yaklaşımı öneririm:

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

Gereksinim duyduğunuz diğer şeyler Form API başvurusundadır


Bu işlev, $ form_state gerekli olmadığında (yani, formu ilk oluştururken) drupal_build_form () yerine kullanılmalı ve genellikle menü geri çağrısı olarak kullanılmalıdır. api.drupal.org/api/drupal/includes!form.inc/function/…
khaled_webdev

0

Benzer bir sorun vardı ve @ kalabro'nun cevabı ve onunla başa çıkmak için kendi yolumun bir karışımı ile çözüldü.

Temel olarak, jeton kullandığım statik bir açılış sayfam var. In hook_tokensben üzerinden kayıt formunu diyoruz $form = drupal_get_form('user_register_form', 'register-test');.

Ve son olarak hook_form_alter'da String'in "register-test" olup olmadığını kontrol ediyorum. Bu, üzerinden yapılır $form_state['build_info']['args'][0]. İşte fonksiyon:

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['...
  }
...
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.