在Drupal中捕获块的更改/添加/删除事件

时间:2010-11-30 09:52:57

标签: php drupal drupal-hooks drupal-blocks

当添加,移动,编辑或删除Drupal中的Block时,我需要添加一些功能(刷新一些缓存等),是否有任何类型的钩子(或其他有点Drupal原生方式),就像有hook_nodeapi的节点?

我知道有hook_block$op始终是list,所以它并没有任何好处。

1 个答案:

答案 0 :(得分:1)

不幸的是,块没有那种信令机制。我会使用表单系统在需要其他工作信号的地方添加提交回调。

/**
 * Implementation of hook_form_alter().
 */
function custom_form_alter(&$form, &$form_state, $form_id) {
  // Overview form.
  if ($form_id == 'block_admin_display_form') {
    $form['#submit'][] = 'custom_block_admin_display_form_submit';
  }
  // Individual block configuration form.
  elseif ($form_id == 'block_admin_configure') {
    $form['#submit'][] = 'custom_block_admin_configure_submit';
  }
}

/**
 * Submit handler for block overview form.
 */
function custom_block_admin_display_form_submit($form, &$form_state) {
  cache_clear_all();
}

/**
 * Submit handler for block configuration form.
 */
function custom_block_admin_configure_form_submit($form, &$form_state) {
  drupal_set_message(t('You have changed a block. Run for the hills!'));
}

此方法的一个缺点是配置块的任何替代方法都不起作用。如果有人在块模块之外构建自定义表单,或者如果您使用上下文或面板来移动块,则无济于事。当然,由于任何这些备用配置点也会使用表单,因此您也可以使用hook_form_alter()来破解其提交过程。