当添加,移动,编辑或删除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() 也涉足他们的提交过程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top