2010-06-17 74 views
1

我试图改变重定向当我提出我的编辑节点形式,通过addming下面一行到我的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

你想保存在节点编辑窗体吗? – googletorp 2010-06-17 07:23:52

回答

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'];)

+0

比我的回答更清楚。关于$ form ['#after_build']的好的提示节省了模块权重的麻烦。 – 2010-06-18 09:35:56

+0

@Jermey法语:是的,$ form ['#after_build']可以非常方便。但是,如果有两种形式使用它,你最终还是会搞乱模块权重:/(除非你更高一点并开始使用'#pre_render' - 花了我两个小时的时间来了解CCK如何设法完全忽略/覆盖我的节点字段顺序调整;) – 2010-06-18 09:57:01

+0

通过提供一个真正完整的答案,你不仅回答了这个问题。干得好,何。 :) – 2012-09-06 20:40:23

2

您应该创建一个模块,并使用hook_form_alter()改变窗体显示之前。通常,您不应该在主题图层中操作数据和行为。

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

+0

好的1)我应该在哪里实现hook_form_alter()函数? 2)它的名字应该是什么node_form_alter()? (我应该将它包含在后端主题文件夹中吗?) – aneuryzm 2010-06-18 08:25:47

+0

模块不是主题,而是有不同的命名约定。你将需要看看一些模块开发如何。 – 2010-06-18 09:34:33