我正在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';
这解决了这个问题。
答案 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';
。现在删除和重定向都被触发了。