节点删除后重定向不会删除节点

时间:2013-08-22 18:38:22

标签: redirect drupal drupal-7

我正在Drupal 7中实现'form_alter'挂钩。我想在删除任何类型'article'的节点后将web重定向到特定节点。 似乎这样做的正确方法是:

    function mymodule_form_alter(&$form, &$form_state, $form_id){

       switch ($form_id){
          case 'node_delete_confirm':
          if($form['#node']->type == 'article'){
          $form['actions']['submit']['#submit'][] = '_mymodule_redirect';
          }
          break;  
        }

    }

    function _mymodule_redirect($form, &$form_state){

          $form_state['redirect'] = 'node/60';      

    }

当我把这段代码放在我的模块中时,它会在确认删除节点后重定向但是节点实际上没有被删除,如果我去主页它仍然活着!

如果删除代码,节点将按预期删除,网页将照常重定向到首页。

我做错了什么?

更新:在添加重定向处理程序之前,我在重定向操作写入以下行之前强制执行'node_delete_confirm_submit':

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

这解决了这个问题。

2 个答案:

答案 0 :(得分:1)

完成此任务的最简单方法(根本不必使用钩子)将使用Rules模块。这是在您的网站上执行任意数量操作的一种很好的干净方式,我知道在删除某种类型的内容后重定向用户的规则。

答案 1 :(得分:0)

为了澄清,我重复了整个正确答案:

/**
 * Implements hook_form_alter()
 */
function MYMODULE_form_alter(&$form, &$form_state, $form_id){
  switch ($form_id) {
    case 'node_delete_confirm':
      // replace 'article' in next line with your node type machine name
      if($form['#node']->type == 'article') {
        $form['actions']['submit']['#submit'][] = 'node_delete_confirm_submit';
        $form['actions']['submit']['#submit'][] = '_MYMODULE_redirect';
      }
    break;
  }
}

function _MYODULE_redirect($form, &$form_state){
  // replace 'node/123' in next line with node you like redirect to
  $form_state['redirect'] = 'node/123';
}

仅执行$form['actions']['submit']['#submit'][] = '_MYMODULE_redirect';是不够的。仍然需要触发$form['actions']['submit']['#submit'][] = 'node_delete_confirm_submit';。现在删除和重定向都被触发了。