雖然drupal 7本身提供的block模組已經可以建立自訂的block,不過當需要與整個自訂模組整合的時候,總不能讓使用者端在安裝玩模組之後,還自己去新增block才能使用吧,這樣「模組」都不「模組」了。
所以本篇主要要談的是如何在模組中建立自訂的block,範例程式可參考這篇。
主要的掛勾函數(hook_block_xxx)如下:
- 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程式碼。
- hook_block_view($delta='')
傳入block key($delta),返回一個rendered(string)或renderable(array)的資料。參數如下:
subject:區塊標題,如無預設值,須設定為NULL
content:區塊內容,可以是renderable的array或已經rendered的字串string
- hook_block_configure($delta='')
定義block的設定表單(return $form)
- 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; }