有了节点 ID,我们就可从数据库中取出指定的内容片段了。
为了做到这一点,我们可以编写令一条(更复杂)的 SQL 语句,以获取节点内容。因为节点内容散布在多个表格中,我们不得不使用若干个联合(joins)以获得需要的内容。幸运的是,有个更简单的方法。
Drupal 的节点 API 提供了一个方便的函数替我们完成繁琐的工作: node_()。如果我们传递给这个函数一个 NID,它将反回一个包含节点内容的对象。
提示:节点是用 Drupal 模块实现的。节点API的主要部分(位于drupal/modules/node/node.module)提供了几十个函数以处理节点。
使用 node_load(), 我们就可以完成函数了,如下:
function _philquotes_get_quote() {
$sql = "SELECT nid FROM {node} ".
"WHERE status=1 AND type='quote' ORDER BY RAND() LIMIT 1";
$res = db_query($sql);
$item = db_fetch_object($res);
$quote = node_load($item->nid);
return $quote;
}
只有高亮的两条是新增的。我们这里所做的,就是用 node_load() 取出一个完整的节点对象,然后返回这个对象。(如果传给 node_load() 一个 NULL 值,它只是返回 FALSE。我们在 philquotes_block() 函数中处理空值的情况。)
在我们的模块中,这起什么作用呢?让我们回顾一下前面编写的philquotes_block() 函数中的几行:
$item = _philquotes_get_quote();
if(!empty($item)) {
$content = theme('philquotes_quote',
check_plain($item->body),
check_plain($item->title));
现在,philquotes_block() 中的 $item 变量包含我们刚才用_philquotes_get_quote() 取出的节点对象($quote的值)。我们现在得到了所需数据。现在我们需要对它进行格式化以便显示。
接下来,我们将学习 theme()函数(和相关代码),以及它如何把我们的对象处理成一个风格化的字符串。

-
获取Drupal节点内容
conan 发表于 2009-01-13 09:14
