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ěď.
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.
Dobrý den. Obávám se, že bez rebuildu nebude Drupal na dodatečně přidaná políčka ve formuláři slyšet.