WIKI使用導(dǎo)航
站長(zhǎng)百科導(dǎo)航
站長(zhǎng)專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計(jì)算
- 微博營(yíng)銷
- 虛擬主機(jī)管理系統(tǒng)
- 開放平臺(tái)
- WIKI程序與應(yīng)用
- 美國(guó)十大主機(jī)
Drupal-hook nodeapi
導(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:
這個(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é)論.
- 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 。
- 節(jié)點(diǎn)顯示的內(nèi)容是$node->content['body']['#value']里面的內(nèi)容,而不是$node->body里面的內(nèi)容。
- drupal函數(shù)hook_nodeapi的$op為load的時(shí)候,你可以添加新的節(jié)點(diǎn)屬性,也可以操縱原來的節(jié)點(diǎn)屬性。
但是當(dāng)$op為view,就只是節(jié)點(diǎn)的顯示了。