Drupal 模組開發 - 建立自訂的區塊(block)

雖然drupal 7本身提供的block模組已經可以建立自訂的block,不過當需要與整個自訂模組整合的時候,總不能讓使用者端在安裝玩模組之後,還自己去新增block才能使用吧,這樣「模組」都不「模組」了。

所以本篇主要要談的是如何在模組中建立自訂的block,範例程式可參考這篇

主要的掛勾函數(hook_block_xxx)如下:

  1. hook_block_info()
    定義模組中block的基本資訊($block[$block_key]=>array()),參數如下:
    info(string):在區塊列表顯示的名稱(必要參數)
    cache:快取方式
    properties:額外的metadata參數。
    weight:權重。
    status:預設啟用或停用。
    region:限制可顯示的區域,必須吻合版型的區域設定。
    visibility:限制顯示選項,選項為BLOCK_VISIBILITY_NOTLISTED(除頁面列表外的所有頁面), BLOCK_VISIBILITY_LISTED(僅頁面列表中的頁面), BLOCK_VISIBILITY_PHP(以PHP控制),其中頁面列表需於pages參數中設定。
    pages:頁面列表,字串值,若visibility設定為前二者時。可以用'\n', '\r', '\r\n' 來區隔不同的頁面路徑。若設定為PHP控制時,此欄位則填入php程式碼。
     
  2. hook_block_view($delta='')
    傳入block key($delta),返回一個rendered(string)或renderable(array)的資料。參數如下:
    subject:區塊標題,如無預設值,須設定為NULL
    content:區塊內容,可以是renderable的array或已經rendered的字串string
     
  3. hook_block_configure($delta='')
    定義block的設定表單(return $form)
     
  4. hook_block_save($delta='',$edit=array())
    儲存hook_block_configure()中的設定值,如同form_sumbit()

在hook_block_info中定義block的方式,如下例:

function my_custom_block_info(){
  $blocks=array();
  // my_block_1即為此block的key
  $blocks['my_block_1']=array(
    'info'=>t('區塊顯示名稱')
  ),
  $blocks['my_block_2']=array(
    'info'=>t('區塊顯示名稱2')
  )
  return $blocks;
}

 要設定block中的內容,如下例:

function my_custom_block_view($delta=''){
  switch ($dela){
    case:'my_block_1':
      $block=array(
        'subject'=>t('block_1 title'),
        'content'=>content_generate(), //生成區塊內容的函式
      );
      break;
    case:'my_block_2':
      $block=array(
        'subject'=>t('block_2 title'),
        'content'=>array('#markup'=>'Test'),
      );
      break;
  }
return $block;
}