Přidávání polí do formuláře pomocí jQuery

Dobrý den,

vytvořil jsem si nový modul a vněm formulář. Jsou tam vygenerovány nějaké prvky (textarea, input…). Uživatel pomocí jQuery může přidat prvky nové.

Po odeslání formuláře však hodnoty z nových polí nejsou dostupné ve funkci submit(). Nejsou obsaženy v proměnné $form nebo $form_state. Musím nějak drupalu říct, že jsem přidal nová pole, jak?

<code>

function my_module_form_submit($form, &$form_state) {

print_r($form);

exit();

</code>

Našel jsem něco podobnéhé v příkladech  http://drupal.org/project/examples, zejména pak ajax_example, Add-more button. Jestli jsem to dobře pochopil, tak se odešle formulář pomocí ajaxu na server, tam se rebuildne a celý vyrendrovaný se pošle zpět. Můj formulář je trochu objemnější a přijde mi celkem zbytečné jej celý odesílat sem a tam, jen když chci přidat nový texfield.

Je možné objejít celé odesílání sem a tam?

Předem děkuji za odpověď.

PřílohaVelikost
Examples42.53 KB
Můj formulář43.77 KB
Fórum: 

Volná místa v IT

Další pracovní místa najdete na stránce Volná pracovní místa v IT.

Reklama

Dobrý den. Obávám se, že bez rebuildu nebude Drupal na dodatečně přidaná políčka ve formuláři slyšet.

Majitel Maxiorla. Nabízím mimo jiné placené poradenství pro Drupal. Jsem i na Twitteru.

Dobrý den,

 zkouším nyní udělat rebuild formuláře. Rár bych navíšil počet polí ve formuláři zavoláním adresy admin/structure/set_menu/rebuild/"form_build_id". Zatím to vypadá, že se form vůbec nezmění.

 

<code>

 

/**

 * Implements hook_menu().

 */

function set_menu_menu() {

  $items['admin/structure/set_menu/rebuild/%'] = array(

    'title' => 'Rebuilt',

    'page callback' => 'set_menu_ajax_rebuild',

    'page arguments' => array(4),

    'access callback' => TRUE,

  );

  return $items;

}

 

function set_menu_ajax_rebuild($form_build_id) {

  $form_state = form_state_defaults();

  $form = form_get_cache($form_build_id, $form_state);

 

    // Since some of the submit handlers are run, redirects need to be disabled.

  $form_state['no_redirect'] = TRUE;

 

  // When a form is rebuilt after Ajax processing, its #build_id and #action

  // should not change.

  // @see drupal_rebuild_form()

  $form_state['rebuild_info']['copy']['#build_id'] = TRUE;

  $form_state['rebuild_info']['copy']['#action'] = TRUE;

 

 

  $form_state['set_menu']['count']++;

  $form_state['rebuild'] = TRUE;

 

  drupal_process_form($form['#form_id'], $form, $form_state);

}

 

 

function set_menu_form($form, &$form_state) {

 // generuje pocet poli na zaklade hodnoty v $form_state['set_menu']['count'];

}

 

/**

 * Form submission handler for set_menu_form().

 */

function set_menu_form_submit($form, &$form_state) {

  print_r($form_state); // $form_state['set_menu']['count'] nebyl navysen po odeslani 

  exit();

}

 

 

 

</code>

 

Promenna $form_state['set_menu']['count'] neni po zavolani admin/structure/set_menu/rebuild/"form_build_id" a odeslani formulare navysena. Mohu se timto postupem dostat k tomu, abych navíšil proměnnou $form_state['set_menu']['count']  a rebuildnul formulář?

Děkuji, Martin.

 

Zas jsem trochu pokročil. Problém je u vollání drupal_process_form($form['#form_id'], $form, $form_state); 

Tělo funkce nikdy nepřijde přes podmínku

<code>

// Only process the input if we have a correct form submission.

if ($form_state['process_input']) {

....

}

</code>

http://api.drupal.org/api/drupal/includes%21form.inc/function/drupal_process_form/7

Můj problém jsem sepsal ještě sem http://drupal.org/node/1559306 Pokud by někdo přišel na řešení, rád zaplatím předem smluvenou částku. 

 

Děkuji, Martin.