getitems增加字段的hook

原創 jingccj  2019-08-18 11:20:03  閱讀 347 次 評論 0 條
_plkcFN">

getitems調用數據時提供了豐富的字段,還有過濾器等機制可以對字段內容進行截斷等簡單的處理。但有時候,需求更加復雜比如從其他關聯表中獲取數據在getitems新增一個字段輸出。


akcms的getitems處理字段hook可以滿足這個需求(需要內核6.1+),下面我從易到難說明一下如何給getitems增加一個test字段:


首先錄入一些測試數據,然后新建一個測試頁面使用測試模版調出這些數據。


模版內容是:

<{getitemstemplate="[title]<br/>"}>

一切順利的話,會顯示10條測試內容的題目。


下面我們修改模版為:

<{getitemstemplate="[title][test]<br/>"}>

直接刷新頁面會發現每一行的結尾都多了一個[test],這說明不存在test這個字段,所以直接輸出了,下面我們就讓[test]變成hello,world!


首先創建一個應用(如何創建應用?),確保應用的目錄中有一個子目錄叫hook,然后在其中新建一個文件叫:getitemsfield.php,在這個文件中進行輸出前的數據組裝,系統已經組裝好一個$return數組待輸出


下面我們寫一個最簡單的例子:

<?php
$return['test']='hello,world!';
?>

然后更新緩存再在前臺刷新頁面,就會發現每行的結尾處的[test]變成了hello,world!了。


這只是一個演示,既然能把[test]賦值為hello,world!,就能從關聯數據表獲取內容,也能從第三方數據源獲取內容,這個根據自己的需求靈活運用。


下面這個例子稍微復雜一些,假設二次開發時新建了一個test_table的關聯表其中有個test_field字段,用數據的ID($return['itemid'])通過關聯表取數據:

<?php
$test=$db->get_by('test_field','test_table',"itemid='{$return['itemid']}'");
$return['test']=$test;
?>

增加字段、從第三方數據源獲取內容會拖慢速度,建議盡量將hook限定在一個范圍內,比如:只為某個欄目的數據源增加字段。

<?php
if($return['categoryid']==1){
	$return['test']='hello,world!';
}
?>

以上的例子都是新增字段,其實修改既有字段的內容也是一樣的道理,二次開發時可以靈活運用。

本文地址:http://www.joutvc.tw/post/2092.html
版權聲明:本文為原創文章,版權歸 jingccj 所有,歡迎分享本文,轉載請保留出處!

發表評論


表情

還沒有留言,還不快點搶沙發?