2013-08-22 47 views
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'; 

這解決了問題。

回答

1

完成此任務(而不必使用掛鉤)的最簡單方法是使用Rules模塊。這是在您的網站上執行任意數量操作的一種很好的乾淨方式,我知道在刪除特定類型的內容之後重定向用戶有一條規則。

+0

我會給規則一個機會。你知道任何例子嗎(使用Rules Api來做類似的事情)?我不介意使用任何模塊作爲我的模塊的依賴項,但我不想從管理界面設置它。我仍然困惑爲什麼我的代碼不工作。 – user2708473

+1

我終於找到了一個簡單的解決方案。我添加了$ form ['actions'] ['submit'] ['#submit'] [] ='node_delete_confirm_submit';在添加重定向回調之前。感謝EJK提出的建議,我會在其他情況下考慮這一點。 – user2708473

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';。現在刪除和重定向都被觸發。