当前有一个需求,就是在每个node的下面添加一个“最近流行”的一个内容。
如下图1:
这个肯定就是涉及drupal函数hook_nodeapi的应用了。
我第一开始想的比较简单了,就是节点load的时候直接在$node->body下面添加内容
第一次代码如下:
function popularterms_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
}
这样加上以后,每个节点显示的时候的确也是在节点下面显示了“最近流行”的内容
但是,当编辑这个节点的时候,这个“最近流行”的内容也出现在了内容添加的编辑器里。
图2如下:
这样的话只使用$op为load肯定是不行了,那就用$op为view试试。
于是换成如下代码。
function popularterms_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
}
这样“最近流行”的内容就正常显示到了node节点的最下面了。并且在编辑节点的时候不会出现“最近流行”的内容。
从上面的实例中可以得到如下几个结论
1、drupal函数hook_nodeapi的$op为load的时候,是可以向node节点添加内容的时候,比如$node->popularterms_html_content = popularterms_html_content();,就是在node节点上添加了
$node->popularterms_html_content 。
2、节点显示的内容是$node->content['body']['#value']里面的内容,而不是$node->body里面的内容。
3、drupal函数hook_nodeapi的$op为load的时候,你可以添加新的节点属性,也可以操纵原来的节点属性。
但是当$op为view,就只是节点的显示了。