Drupal:$ form ['#redirect'] = FALSE;不起作用

时间:2010-06-17 07:11:49

标签: drupal drupal-6

我在提交编辑节点表单时尝试更改重定向,方法是将以下行添加到我的template.php文件中,在我的主题中

$form['#redirect'] = FALSE;

我确信template.php文件运行良好,因为我有其他行我可以更改,例如,某些元素的权重。但是重定向不起作用。

我也试过$ form ['#redirect'] ='anotherPage';没有成功。

我做错了什么?我正在关注Drupal API,关于表单: http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html/6#redirect

感谢

2 个答案:

答案 0 :(得分:9)

IIRC,$form['#redirect']条目仅在以后在表单处理中未设置其他重定向时才有效。如果您take a look at node_form_submit(),您可以看到它通过$form_state['redirect'] = 'node/'. $node->nid;设置了自己的重定向,从而覆盖了之前在表单定义中定义的重定向。

您可以通过adding your own submit handler callback$form['#submit']数组解决此问题(需要在默认值后放置)。在该回调中,您可以将$form_state['redirect']更改为所需的路径。

注意:如果$form['#submit']数组在hook_form_alter()期间尚未包含默认条目,则可能需要通过adding a callback to $form['#after_build']添加另一个间接 - 在该回调中,您有最后的机会在呈现之前操纵表单数组。 (好吧,几乎是最终的 - 后来还有$form['#pre_render'];)

答案 1 :(得分:2)

您应该创建一个模块并使用hook_form_alter()在显示之前更改表单。通常,您不应该操纵主题层中的数据和行为。

您可以在.tpl文件中使用drupal_rebuild_form()来避免这种情况,但我不知道这将带来什么其他后果。