代码之家  ›  专栏  ›  技术社区  ›  Hannes

捕捉Drupal中块的更改/添加/删除事件

  •  0
  • Hannes  · 技术社区  · 14 年前

    当Drupal中的一个块被添加、移动、编辑或删除时,我需要添加一些功能(刷新一些缓存等等),是否有任何类型的钩子(或者另一种类似于Drupal的本地方式)来连接 hook_nodeapi ?

    我知道有 hook_block 但是在那里 $op 总是 list ,所以这并不是什么好事。

    1 回复  |  直到 12 年前
        1
  •  1
  •   Grayside    14 年前

    不幸的是,块没有这种信号机制。我将使用表单系统添加提交回调,无论您需要额外工作的信号。

    /**
     * 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() 也可以侵入他们的提交过程。

    推荐文章