Formular mit ahah, drupal_set_cache tut nichts
Eingetragen von hnv (28)
am 22.01.2010 - 12:55 Uhr in
am 22.01.2010 - 12:55 Uhr in
Hallo alle,
ich brauche dringend eure Hilfe, mein Kopf zerbricht bald.
Ich schreibe ein Modul mit eigener Inhalttype. Mein Formular enthält ein ahah-Button „More Field“. In der test_more_field_js Funktion kann ich zwar die Anzahl der Felder mit drupal_get_cache ermitteln. Die Funktion drupal_set_cache scheint aber keine Wirkung zu haben. Ich erhalte immer nur gleiche Werte (2, ziehe Code).
Wo habe ich die Fehler?
/**
* Implementation of hook_form
**/
function test_form($node) {
$count = ($node->count) ? $node->count : 2;
$form['count'] = array(
'#type' => 'hidden',
'#value' => $count,
);
for ($i=0;$i<$count;$i++) {
$form["field-$i"] = array(
'#type' => 'textfield',
'#title' => $i,
'#size' => 30,
);
}
$form['markup'] = array(
'#type' => 'markup',
'#value' => '<div id="add_more_field"> </div>',
);
$form['more_field'] = array(
'#type' => 'button',
'#value' => t('More Field'),
//'#weight' => 6,
'#ahah' => array(
'event' => 'click',
'method' => 'before',
'path' => 'test_more_field_js',
'wrapper' => 'add_more_field',
),
'#suffix' => '<div style="clear:both"></div>',
);
return $form;
}
/**
* Ahah function to add more fields
**/
function test_more_field_js() {
include_once 'modules/node/node.pages.inc';
$form_state = array('storage' => NULL, 'submited' => FALSE);
$form_build_id = $_POST["form_build_id"];
$form = form_get_cache($form_build_id, $form_state);
$number = $form["count"]['#value'];
// Preparing for #5.
$args = $form['#parameters'];
$form_id = array_shift($args);
$form_state["post"] = $form["#post"] = $_POST;
$form["#programmed"] = $form["#redirect"] = FALSE;
$form["count"]['#value'] = $number + 1;
// Step #5.
// drupal_process_form($form_id, $form, $form_state);
// Step #6 and #7 and #8.
// $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id);
form_set_cache($form_built_id, $form, $form_state);
$form += array(
'#post' => $_POST,
'#programmed' => FALSE,
);
$field = array(
'#type' => 'textfield',
'#title' => $number,
);
$output = theme('status_messages') . drupal_render($field);
print drupal_to_js(array('status' => TRUE, 'data' => $output));
}
Vielen Dank für die Hilfe.
Grüße
hnv
- Anmelden oder Registrieren um Kommentare zu schreiben
Neue Kommentare
vor 21 Stunden 53 Minuten
vor 1 Tag 2 Stunden
vor 1 Tag 16 Stunden
vor 1 Tag 20 Stunden
vor 3 Tagen 2 Stunden
vor 1 Tag 2 Stunden
vor 4 Tagen 12 Stunden
vor 3 Tagen 2 Stunden
vor 4 Tagen 12 Stunden
vor 4 Tagen 20 Stunden