implement hook_block()

hook_block() 是一個給 Drupal 提供block 的方法
假如你發覺自己在 add block 的時候用了 input method 使用了php
那你其實應該建立一個 module, 使用 hook_block()

原因: "module" vs "add block"

  • php 的 syntax error 不會因為寫進了 DB 而做成修正的極大麻煩 vs 要直接修改 DB record
  • File 方便 version control vs DB record 的 version control 和沒有做差無幾..
  • customization 集中方便修改 vs 源碼分散
  • File deployment vs DB deployment

所以, 不要懶了, 而且建立hook_block() 也很簡單

假設 module 名為 joe

<?php
function joe_block($op = 'list', $delta = 0, $edit = array()) {
//在 admin/building/block 時設定用
 
if ($op == 'list') {
//$blocks 為array, 即一個module 可以提供多個block
   
$blocks[0] = array('info' => t('Mymodule block #1 shows ...'),
     
'weight' => 0, 'status' => 1, 'region' => 'left');
//第二個block
   
$blocks[1] = array('info' => t('Mymodule block #2 describes ...'));
// $op為list 時返回 block[]
   
return $blocks;
  }
//$op 為 view 則 真正輸出使用
 
else if ($op == 'view') {
    switch(
$delta) {
//第一block, $delta 為 0
     
case 0:
       
$block = array('subject' => t('Title of block #1'),
//content 可以在另一個function 內定義
         
'content' => joe_display_block_1());
        break;
//$delta == 1
     
case 1:
       
$block = array('subject' => t('Title of block #2'),
         
'content' => joe_display_block_2());
        break;
    }
    return
$block;
  }
}

function
joe_display_block_1() {
 
//直接貼原本在php content 內的代碼就可以了
 
return $return;
}

function
joe_display_block_2() {
  return
$return;
}
?>

ref:
http://api.drupal.org/api/function/hook_block/6

建立一個新 module:
http://www.joetsuihk.com/module_development_introduction_moduleinfo

台灣的朋友的詢問:
http://drupaltaiwan.org/forum/20100205/4016#comment-13542

Google