我们可以把所以的新代码都塞进 goodreads_block() 钩子;但是,这将使函数变得冗长,难以阅读和维护。我们不在这里加入大片代码,我们只是调用另一个函数,让它完成其余的工作。
/** * Implementation of hook_block */ function goodreads_block($op='list' , $delta=0, $edit=array()) { switch ($op) { case 'list': $blocks[0]['info'] = t('Goodreads Bookshelf'); return $blocks; case 'view': $url = 'http://www.goodreads.com/review/list_rss/' .'398385' .'?shelf=' .'history-of-philosophy'; $blocks['subject'] = t('On the Bookshelf'); $blocks['content'] = _goodreads_fetch_bookshelf($url); return $blocks; } }
上面的代码看起来应该脸熟。这是我们的钩子函数实现,上一章见到过。但是,我们进行了几处修改,这些地方用高亮指示出来了。
首先,我们增加了一个变量,$url,它的值是我们将要使用的 Goodreads XML feed 的 URL (http://www.goodreads.com/review/list_rss/398385?shelf=history-of-philosophy) 对于一个全部完成的模块,它应该是个可以配置的参数,不过目前,我们先把它硬编码在这里。
模块的第二个变化是获取内容。先前,函数把内容设定为 t('Temporary content')。现在它调用另一个函数:_goodreads_fetch_bookshelf($url).
这里,开头的下划线表明这个函数是我们模块的一个私有函数——我们不想让模块以外的任何代码调用这个函数。用开头的下划线把函数划分为私有函数,是你应该在代码中采用的另一个 Drupal 惯例。
现在让我们来看看 _goodreads_fetch_bookshelf() 函数。
评论
发表新评论