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