0

Drupal のブロックが追加、移動、編集、または削除されたときに、いくつかの機能を追加する必要があります (いくつかのキャッシュなどをフラッシュします) hook_nodeapi

あることは知っていますがhook_block$op常にlistあるので、あまり良くありません。

4

1 に答える 1

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!'));
}

この方法の 1 つの欠点は、ブロックを構成する別の方法が機能しないことです。誰かがブロック モジュールの外部でカスタム フォームを作成した場合、またはコンテキストまたはパネルを使用してブロックを移動している場合、それは役に立ちません。もちろん、これらの代替構成ポイントもフォームを使用するため、フォームを使用hook_form_alter()して送信プロセスをハッキングすることもできます。

于 2010-11-30T19:27:50.127 に答える