2010-11-30 59 views
0

当Drupal中的块被添加,移动,编辑或删除时,我需要添加一些功能(刷新一些缓存等),是否有任何一种钩子(或者另一种有点Drupal原生的方式)就像有节点hook_nodeapi在Drupal中捕捉块变化/添加/删除事件

我知道有hook_block但是$op总是list,所以它没有什么好处。

回答

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()攻击他们的提交流程。