Drupal-hook nodeapi

来自站长百科
跳转至: 导航、​ 搜索

导航:上一页

下面内容基于版本drupal 6.

Nodeapi是一个非常有用的hook,它能够让你为一个节点加载额外的信息,在节点内容被渲染前为其添加额外的元素。在不同的操作上(更新、删除、插入等)执行额外的任务。

格式:hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL)

在其他模块内定义,对节点施于任务。

实例:(选自Drupal爱好者) 当前有一个需求,就是在每个node的下面添加一个“最近流行”的一个内容。如下图1:

Drupalnodeapi.jpg

这个肯定就是涉及drupal函数hook_nodeapi的应用了。我第一开始想的比较简单了,就是节点load的时候直接在$node->body下面添加内容

第一次代码如下:

function popularterms_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {

  switch ($op) {

   case 'load':

    $node->body =  $node->body.popularterms_html_content();

    //popularterms_html_content()函数就是“最近流行”里面显示的内容

    break;

  }
}

这样加上以后,每个节点显示的时候的确也是在节点下面显示了“最近流行”的内容.但是,当编辑这个节点的时候,这个“最近流行”的内容也出现在了内容添加的编辑器里。

这样的话只使用$op为load肯定是不行了,那就用$op为view试试。于是换成如下代码。

function popularterms_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {

  switch ($op) {

   case 'load':

      $node->popularterms_html_content = popularterms_html_content();

      ////popularterms_html_content()函数就是“最近流行”里面显示的内容

    break;
    case 'view':
      $node->content['body']['#value'] = $node->content['body']['#value'].$node->popularterms_html_content;
     break;

  }

}

这样“最近流行”的内容就正常显示到了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,就只是节点的显示了。

参考资料[ ]