当添加、移动、编辑或删除 Drupal 中的块时,我需要添加一些功能(刷新一些缓存等),是否有任何类型的钩子(或另一种 Drupal 原生方式),就像节点一样hook_nodeapi
?
我知道有,hook_block
但$op
总是有list
,所以它不是真的有什么好处。
当添加、移动、编辑或删除 Drupal 中的块时,我需要添加一些功能(刷新一些缓存等),是否有任何类型的钩子(或另一种 Drupal 原生方式),就像节点一样hook_nodeapi
?
我知道有,hook_block
但$op
总是有list
,所以它不是真的有什么好处。
不幸的是,区块没有那种信号机制。我会使用表单系统添加提交回调,只要您需要额外工作的信号。
/**
* 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()
它们来侵入他们的提交过程。