我在提交编辑节点表单时尝试更改重定向,方法是将以下行添加到我的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
感谢
答案 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()来避免这种情况,但我不知道这将带来什么其他后果。