Drupal 7 VBO的钩子form_alter没有触发

时间:2016-05-13 13:24:52

标签: drupal drupal-7 hook

我使用View Bulk Operation模块在​​我的自定义视图中执行多次删除,其中列出了我的内容。

但我必须检查一个值才能知道我是否接受删除内容...... 我已使用/admin/content在我的hook_form_alter()视图中进行了多项选择,并且在我的自定义视图中执行此操作时无法触发...

我尝试过其他类似的钩子:

  • hook_views_bulk_operations_form_alter()听起来不错......但它并没有触发
  • hook_node_delete()本来可以有效但我不知道如何在函数中停止删除过程(exit;break;只是抛出一个错误而我没有得到为什么)

我的hook_form_later代码可以正常使用'内容页面' :

function MODULE-NAME_form_alter(&$form, &$form_state, $form_id) {
  foreach($form['nodes'] as $pnode)
  {
    if(is_array($pnode))
    {
        if(!isDeletable($pnode['#value'])) // my function which says if we can delete the content
        {
            $n = node_load($pnode['#value']);
            $status = isset($n->workbench_moderation['current']->state) ? $n->workbench_moderation['current']->state : false;
            $string = "This content won't be deleted : ".substr($pnode['#suffix'],0,-6); // substr to cut off the '</li>' !
            drupal_set_message(t($string), 'warning');

            unset($form['nodes'][''.$pnode['#value']]); // get the content off the form ( my way to say that the content shouldn't be deleted )
        }
    }
  }
}

hook_views_bulk_operations_form_alter()如何触发?

1 个答案:

答案 0 :(得分:0)

我不认为VBO有自己的形式alter hook,所以hook_views_bulk_operations_form_alter()根本就没有被调用。

我一直在做的方法是使用hook_form_alter(),类似于你的解决方案,但检查表单ID只对我感兴趣的VBO表单起作用。

理论上你可以在VBO表单上添加一个alter hook,但我认为它比直接在hook_form_alter()中实现要慢。如果您有很多VBO表单要修改它,那么可能值得。