Поймать изменение / добавление / удаление события для блоков в Drupal - PullRequest
0 голосов
/ 30 ноября 2010

Мне нужно добавить некоторые функциональные возможности (очистить некоторые кэши и т. Д.), Когда блок в Drupal добавляется, перемещается, редактируется или удаляется, есть ЛЮБОЙ вид хуков для этого (или другой, несколько нативный способ Drupal), как для узлы с hook_nodeapi?

Я знаю, что есть hook_block, но там $op всегда list, так что это не очень хорошо.

1 Ответ

1 голос
/ 30 ноября 2010

К сожалению, блоки не имеют такого механизма сигнализации.Я бы использовал систему форм, чтобы добавить обратные вызовы отправки, где бы вам ни понадобился сигнал для дополнительной работы.

/**
 * 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() для взлома их процессов отправки.

...