hook_block 的实现(2)
上篇文章我们在一个模块上添加了一个block,现在我们来学习如何添加多个block。快到春节了,我们再做一个春节的倒计时吧。
注意一下代码的变化:
<?php
/**
* Implementation of hook_block().
*/
function dateblock_block($op = 'list', $delta = 0, $edit = array()) {
switch ($op) {
case 'list':
$blocks[0]['info'] = t('Date Block');
$blocks[0]['cache'] = BLOCK_NO_CACHE;
$blocks[1]['info'] = t('春节倒计时');
$blocks[1]['cache'] = BLOCK_NO_CACHE;
return $blocks;
case 'view':
$block['subject'] = t("Today's Date");
$format = variable_get('dateblock', 1);
if ($format == 1) {
$block['content'] = date('Y/n/j');
}
elseif ($format == 2) {
$block['content'] = date('D n/j/Y');
}
elseif ($format == 3) {
$block['content'] = date('D M/j/Y');
}
return $block;
case 'configure':
$options = array(
1 => t('2009/1/1'),
2 => t('Thur 1/1/2009'),
3 => t('Thur Mon/1/2009'),
);
$form['date_format'] = array(
'#type' => 'select',
'#title' => t('Date Format'),
'#options' => $options,
'#default_value' => variable_get('dateblock', 1)
);
return $form;
case 'save':
variable_set('dateblock',(int)$edit['date_format']);
break;
}
}
?>
我在list里面又添加了$blocks[1],这就是第二个block。保存后访问 http://localhost/drupal/admin/build/block 就可以看到我新添加的“春节倒计时”。下面我们在view里为这个block添加内容。之前我提过$delta是用来表示block的编号的,第一个block$delta=0,第二个是1。所以我们现在要根据$delta的不同来给block分配不同的内容了。
<?php
/**
* Implementation of hook_block().
*/
function dateblock_block($op = 'list', $delta = 0, $edit = array()) {
switch ($op) {
case 'list':
$blocks[0]['info'] = t('Date Block');
$blocks[0]['cache'] = BLOCK_NO_CACHE;
$blocks[1]['info'] = t('春节倒计时');
$blocks[1]['cache'] = BLOCK_NO_CACHE;
return $blocks;
case 'view':
if ($delta == 0) {
$block['subject'] = t("Today's Date");
$format = variable_get('dateblock', 1);
if ($format == 1) {
$block['content'] = date('Y/n/j');
}
elseif ($format == 2) {
$block['content'] = date('D n/j/Y');
}
elseif ($format == 3) {
$block['content'] = date('D M/j/Y');
}
return $block;
}
elseif ($delta == 1) {
$today = mktime();
$spring_festival = mktime(0, 0, 0, 1, 25, 2009);
$days = round(($spring_festival - $today) / (3600 *24));
$block['subject'] = t('距离2009年春节还有:');
$block['content'] = $days.t('天');
return $block;
}
case 'configure':
$options = array(
1 => t('2009/1/1'),
2 => t('Thur 1/1/2009'),
3 => t('Thur Mon/1/2009'),
);
$form['date_format'] = array(
'#type' => 'select',
'#title' => t('Date Format'),
'#options' => $options,
'#default_value' => variable_get('dateblock', 1)
);
return $form;
case 'save':
variable_set('dateblock',(int)$edit['date_format']);
break;
}
}
?>
其实知道了原理后就简单了,我们只需要先判断一下$delta值,为不同的block分配不同的内容。如果要对第二个block进行配置的话也需要修改一下configure和save。具体的可以参考我上传的代码。

评论
不错,谢谢!
只是这个没有截图。
晕,怎么看不到我刚才的回复
-----------
呵呵,看到了。