久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

Drupal-hook nodeapi

來自站長(zhǎng)百科
Zhou3158討論 | 貢獻(xiàn)2010年7月13日 (二) 17:37的版本
(差異) ←上一版本 | 最后版本 (差異) | 下一版本→ (差異)
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

導(dǎo)航:上一頁(yè)

下面內(nèi)容基于版本drupal 6.

Nodeapi是一個(gè)非常有用的hook,它能夠讓你為一個(gè)節(jié)點(diǎn)加載額外的信息,在節(jié)點(diǎn)內(nèi)容被渲染前為其添加額外的元素。在不同的操作上(更新、刪除、插入等)執(zhí)行額外的任務(wù)。

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

在其他模塊內(nèi)定義,對(duì)節(jié)點(diǎn)施于任務(wù)。

實(shí)例:(選自Drupal愛好者) 當(dāng)前有一個(gè)需求,就是在每個(gè)node的下面添加一個(gè)“最近流行”的一個(gè)內(nèi)容。如下圖1:

Drupalnodeapi.jpg

這個(gè)肯定就是涉及drupal函數(shù)hook_nodeapi的應(yīng)用了。我第一開始想的比較簡(jiǎn)單了,就是節(jié)點(diǎn)load的時(shí)候直接在$node->body下面添加內(nèi)容

第一次代碼如下:

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

  switch ($op) {

   case 'load':

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

    //popularterms_html_content()函數(shù)就是“最近流行”里面顯示的內(nèi)容

    break;

  }
}

這樣加上以后,每個(gè)節(jié)點(diǎn)顯示的時(shí)候的確也是在節(jié)點(diǎn)下面顯示了“最近流行”的內(nèi)容.但是,當(dāng)編輯這個(gè)節(jié)點(diǎn)的時(shí)候,這個(gè)“最近流行”的內(nèi)容也出現(xiàn)在了內(nèi)容添加的編輯器里。

這樣的話只使用$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()函數(shù)就是“最近流行”里面顯示的內(nèi)容

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

  }

}

這樣“最近流行”的內(nèi)容就正常顯示到了node節(jié)點(diǎn)的最下面了。并且在編輯節(jié)點(diǎn)的時(shí)候不會(huì)出現(xiàn)“最近流行”的內(nèi)容。

從上面的實(shí)例中可以得到如下幾個(gè)結(jié)論.

  1. drupal函數(shù)hook_nodeapi的$op為load的時(shí)候,是可以向node節(jié)點(diǎn)添加內(nèi)容的時(shí)候,比如$node->popularterms_html_content = popularterms_html_content();,就是在node節(jié)點(diǎn)上添加了$node->popularterms_html_content 。
  2. 節(jié)點(diǎn)顯示的內(nèi)容是$node->content['body']['#value']里面的內(nèi)容,而不是$node->body里面的內(nèi)容。
  3. drupal函數(shù)hook_nodeapi的$op為load的時(shí)候,你可以添加新的節(jié)點(diǎn)屬性,也可以操縱原來的節(jié)點(diǎn)屬性。

但是當(dāng)$op為view,就只是節(jié)點(diǎn)的顯示了。

參考資料[ ]