Form redirect
Eingetragen von drupalino (1064)
am 23.07.2010 - 23:27 Uhr in
am 23.07.2010 - 23:27 Uhr in
Hallo zusammen,
verzweifel hier an einer form, ich versuche nah dem Submit des Formulars eine eigene destination nzugeben. Was ja eigentlich mit $form['#redirect'] = 'irgendwohin'; funktionieren sollte, jedoch klappt das gar nicht????
- Anmelden oder Registrieren um Kommentare zu schreiben
Wo genau benutzt du denn das
am 24.07.2010 - 00:05 Uhr
Wo genau benutzt du denn das $form['#redirect'] ?
Also wenn ich in meiner form-Funktion (nicht in der submit-Funktion) den Wert setze, klappt alles, wie es soll.
<?php
function my_new_form($form_state)
{
//hier kommen die ganzen Formular-Elemente
.....
//hier kommt die Redirect-Anweisung
$form['#redirect'] = 'node/805';
}
function my_new_form_submit($form, &$form_state)
{
//hier kommt die Submit-Funktion
}
//Auch per hook_form_alter (bzw. hook_form_FORM_ID_alter) funktioniert das ganze super
function my_module_form_my_new_form_alter(&$form, &$form_state)
{
$form['#redirect'] = 'node/805';
}
?>
Das klappt alles wie geschmiert, machst du evtl. in der Anweisung was falsch?
Du kannst doch einfach eine
am 24.07.2010 - 06:05 Uhr
Du kannst doch einfach eine URL eingeben mit http.
Oder inter: internal:node/10
Ich theme ein
am 24.07.2010 - 08:58 Uhr
Ich theme ein Node-Edit-Template und dort :
<?php //print_r($form)?>
<?php print drupal_render($form['taxonomy']); ?>
<?php print drupal_render($form['field_image']); ?>
<?php print drupal_render($form['field_sedcard_image']); ?>
<?php print drupal_render($form['field_about_me']); ?>
<?php print drupal_render($form['language']); ?>
<?php print drupal_render($form['author']); ?>
<?php print drupal_render($form['revision_information']); ?>
<?php print drupal_render($form['options']); ?>
<?php print drupal_render($form['menu']); ?>
<?php $form['buttons']['submit']['#type'] = 'image_button';
unset ($form['buttons']['preview']);
$form['buttons']['submit']['#src'] = drupal_get_path('theme', '_spot') .'/images/btn_spacer.gif';
if(arg(1)!='add'){
$form['buttons']['delete']['#type'] = 'image_button';
$form['buttons']['delete']['#src'] = drupal_get_path('theme', 'l_spot') .'/images/btn_spacer.gif';
}
$form['#redirect'] = 'node/123';
?>
<div class="btn_background">
<div id="mid_btn_container">
<div class="mid_btn">
<span class="mid_icon_save">
<!-- Icon Save -->
<?php print drupal_render($form['buttons']['submit']); ?>
<br />Save
</span>
</div>
<?php if(arg(1)!='add'){print'
<div class="mid_btn">
<span class="mid_icon_delete">
<!-- Icon Delete -->'.drupal_render($form['buttons']['delete']).
'<br />Delete
</span>
</div>';}?>
</div>
</div>
<?php print drupal_render($form); ?>
<?php
print_r($form); //Enable this to show all Array Variables of Form
?>
Nicht wundern, dass ich öfter render, dies muss ich machen, damit ich die Seite so aufbauen kann wie ichmuss.
Hab schon einiges probiert, aber er Redirekt funktioniert nicht.
hook_form_alter in einem
am 24.07.2010 - 11:34 Uhr
hook_form_alter in einem Modul, denke ich.
Beim Themen ist es wahrscheinlich schon zu spät.
Ich vermute einfach mal was
am 24.07.2010 - 12:05 Uhr
Ich vermute einfach mal was ins Blaue:
Der Wert in $form['#redirect'] wird in der Function drupal_redirect_form ausgelesen und dann über drupal_goto weitergeleitet.
drupal_redirect_form wird nur von drei anderen Funktionen aufgerufen, relevant für uns an dieser Stelle ist wohl drupal_process_form.
Und drupal_process_form wird von drei Form-Funktionen aufgerufen:
drupal_execute
drupal_get_form
drupal_rebuild_form
Ich vermute, dass die Funktion drupal_redirect_form einfach nicht in drupal_render aufgerufen wird. Und wenn diese Funktion nicht aufgerufen wird, ist der redirect-Wert hinfällig, da hilft wohl auch kein form_alter, um den Wert zu setzen, wenn man ihn nicht aufruft.
Vielleicht kannst du in die submit-Funktion ein drupal_goto packen?
Zitat auf
am 24.07.2010 - 14:13 Uhr
Zitat auf http://api.drupal.org/api/drupal/developer--topics--forms_api_reference....
Description: The default goto value after form is submitted. This value should be returned by a form's submit callback function, but altering another form's #redirect value by using hook_form_alter() can be useful to change where that form redirects after it is submitted. Also see #action.
Ja, das hatte ich auch schon
am 24.07.2010 - 14:29 Uhr
Ja, das hatte ich auch schon gefunden.
Also dass heißt aber auch, es geht nur über ein eigenes Modul oder?
Yep, schätze schon..
am 24.07.2010 - 14:53 Uhr
Yep, schätze schon..
Ja, hook_form_alter (oder
am 24.07.2010 - 17:44 Uhr
Ja, hook_form_alter (oder hook_form_FORM_ID_alter) kannst du nur in einem eigenen Modul implementieren, allerdings wäre das auch keine große Sache.
Allerdings könntest du doch stattdessen auch einfach in der submit-Funktion ganz am Ende ein drupal_goto() einfügen, oder?