Drupal-hook nodeapi:修订间差异

来自站长百科
跳转至: 导航、​ 搜索
(新页面: <span style="border:1px solid #000; float:right; text-align:center; padding:6px;"><strong>导航:</strong>上一页</span> <div style="clear:both;"></div>)
 
无编辑摘要
第1行: 第1行:
<span style="border:1px solid #000; float:right; text-align:center; padding:6px;"><strong>导航:</strong>[[Drupal|上一页]]</span>
<span style="border:1px solid #000; float:right; text-align:center; padding:6px;"><strong>导航:</strong>[[Drupal|上一页]]</span>
<div style="clear:both;"></div>
<div style="clear:both;"></div>
下面内容基于版本[[drupal]] 6.
'''Nodeapi'''是一个非常有用的hook,它能够让你为一个节点加载额外的信息,在节点内容被渲染前为其添加额外的元素。在不同的操作上(更新、删除、插入等)执行额外的任务。
'''格式''':hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL)
在其他模块内定义,对节点施于任务。
'''实例''':(选自Drupal爱好者)
当前有一个需求,就是在每个node的下面添加一个“最近流行”的一个内容。如下图1:
1
这个肯定就是涉及drupal函数hook_nodeapi的应用了。我第一开始想的比较简单了,就是节点load的时候直接在$node->body下面添加内容
第一次代码如下:
<pre>
function popularterms_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
  switch ($op) {
  case 'load':
    $node->body =  $node->body.popularterms_html_content();
    //popularterms_html_content()函数就是“最近流行”里面显示的内容
    break;
  }
}
</pre>
这样加上以后,每个节点显示的时候的确也是在节点下面显示了“最近流行”的内容.但是,当编辑这个节点的时候,这个“最近流行”的内容也出现在了内容添加的编辑器里。
这样的话只使用$op为load肯定是不行了,那就用$op为view试试。于是换成如下代码。
<pre>
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;
  }
}
</pre>
这样“最近流行”的内容就正常显示到了node节点的最下面了。并且在编辑节点的时候不会出现“最近流行”的内容。
从上面的实例中可以得到如下几个结论.
#drupal函数hook_nodeapi的$op为load的时候,是可以向node节点添加内容的时候,比如$node->popularterms_html_content = popularterms_html_content();,就是在node节点上添加了
$node->popularterms_html_content 。
#节点显示的内容是$node->content['body']['#value']里面的内容,而不是$node->body里面的内容。
#drupal函数hook_nodeapi的$op为load的时候,你可以添加新的节点属性,也可以操纵原来的节点属性。
但是当$op为view,就只是节点的显示了。
[[category:Drupal|D]]
[[category:Hook|D]]

2010年7月13日 (二) 17:31的版本

导航:上一页

下面内容基于版本drupal 6.

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

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

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

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

1

这个肯定就是涉及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 。

  1. 节点显示的内容是$node->content['body']['#value']里面的内容,而不是$node->body里面的内容。
  2. drupal函数hook_nodeapi的$op为load的时候,你可以添加新的节点属性,也可以操纵原来的节点属性。

但是当$op为view,就只是节点的显示了。