【问题标题】:Drupal: $form['#redirect'] = FALSE; doesn't workDrupal: $form['#redirect'] = FALSE;不工作
【发布时间】:2010-06-17 07:11:48
【问题描述】:

我尝试在提交编辑节点表单时更改重定向,方法是将以下行添加到我的 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

谢谢

【问题讨论】:

  • 你想留在节点编辑窗体吗?

标签: drupal drupal-6


【解决方案1】:

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

【讨论】:

  • 比我的回答清楚得多。关于 $form['#after_build'] 的好技巧可以避免对模块权重的困扰。
  • @Jermey French:是的,$form['#after_build'] 非常方便。然而,如果有两种形式使用它,你最终还是会弄乱模块权重:/(除非你再上一层并开始使用 '#pre_render' - 我花了两个小时才了解 CCK 如何设法完全忽略/覆盖我的节点字段顺序调整;)
  • 您不仅回答了这个问题,而且还提供了一个非常完整的答案。干得好,何。 :)
【解决方案2】:

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

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

【讨论】:

  • ok 1) 我应该在哪里实现 hook_form_alter() 函数? 2)它的名字应该是什么 node_form_alter() ? (我应该将它包含在后端主题文件夹中吗?)
  • 模块不是主题并且有不同的命名约定。你需要看看一些模块开发方法。
猜你喜欢
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 2012-11-22
  • 1970-01-01
相关资源
最近更新 更多