1

我在 Drupal 7 中实现了“form_alter”钩子。我想在删除任何“文章”类型的节点后将网络重定向到特定节点。似乎这样做的正确方法是:

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

这解决了问题。

4

2 回答 2

1

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

于 2013-08-22T19:00:57.750 回答
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';需要触发。现在删除和重定向都被触发了。

于 2013-11-19T12:00:44.797 回答