Drupal如何在表单提交后重定向节点表单

时间:2012-06-01 10:53:42

标签: php drupal drupal-7

在Drupal 7上发布节点时,我会重定向到创建的特定节点。

当我正确发布节点时,我正在搜索重定向到主管理页面。

我试过把它放在template.php上:

function node_submit($form, &$form_state) {
  $form_state['redirect'] = 'admin';
}

但提交时出错:

  

致命错误:无法在/ var / www / XXX / sites / all / themes / XXX / template中重新声明node_submit()(之前在/var/www/XXX/modules/node/node.module:1004中声明)。 php在线xx

6 个答案:

答案 0 :(得分:6)

如果您要做的只是更改用户在提交添加节点表单后重定向到的位置,则可以从特定链接更轻松地进行操作。

只需让您的链接看起来像这样:

/node/add/[CONTENT-TYPE]?destination=[URL-REDIRECT]

以下是我开始工作的一个例子:

/node/add/ic-competencies-toolkit-codes?destination=admin/survey-codes

答案 1 :(得分:5)

这对我有用:

function mymodule_form_FORM_ID_alter(&$form, $form_state){
    $form['actions']['submit']['#submit'][] = 'mymodule_redirect_callback';
}

function mymodule_redirect_callback($form, &$form_state){
    $form_state['redirect'] = '_path_';
}

需要注意的一点是:

$form['actions']['submit']['#submit'][] = 'some_function';

会奏效,但

$form['#submit'][] = 'some_function';

不会

答案 2 :(得分:4)

您可以使用hook_form_alter()来执行此操作。

function YOUR_MODULE_form_alter(&$form, &$form_state, $form_id)
{
  if ($form_id == "CONTENT_TYPE_node_form") {
    $form['#redirect'] = "node";
  }
}

希望这有效。

答案 3 :(得分:4)

或者,如果您不想编写代码,请尝试使用规则模块:http://drupal.org/project/rules

添加新规则并将“React on Event”设置为“保存新内容后”。

将操作设置为:“系统:页面重定向”并正确填写字段。

如果您希望将此规则引入代码,可以将它们导出到模块中!

答案 4 :(得分:1)

在Drupal 7中,这是正确的方法:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if($form_id === 'myform_id'){
    $form['#submit'][] = '_mymodule_redirect_callback';
  }

function _mymodule_redirect_callback($form, &$form_state) {
  $form_state['redirect'] = 'http://www.google.ch';
}

答案 5 :(得分:1)

重定向评论表单或节点表单的最简单方法

case 'my_node_form':
        $form['#action'] .= '?destination=well-done';
      break;

请注意“。”在$ form ['#action']

之后

你需要追加而不是替换!