什麼是標籤調用?
標籤調用是根據調用條件(condition)從數據表(table)讀取調用數量(pagesize)條數據,並按排序方式(order)排序,最終經過標籤模板的佈局輸出數據。
能夠看出,標籤的工做分兩個部分,一是讀取數據,二是顯示數據。
標籤函數原型
標籤函數保存於 include/tag.func.php
php
$parameter 表示傳遞給tag函數的字符串,系統自動將其轉換爲多個變量。
例如傳遞 table=destoon&pagesize=10&hello=world
系統至關於獲得:
$table = 'destoon';
$pagesize = 10;
$hello = 'world';
三個變量
$expires 表示標籤緩存過時時間
>0 緩存$expires秒;0 - 系統默認標籤緩存時間;-1 - 不緩存;-2 - 緩存SQL結果;
通常狀況保持默認不須要傳遞。
數據讀取過程
例如如下標籤:css
會被轉換爲以下的SQL語句:
html
讀出的數據會保存在 $tags 數組裏
一般狀況下不須要寫table=xxx,應該寫moduleid=模塊ID,系統會自動對應模塊的表
數據顯示過程
一、經過標籤模板顯示
傳遞&template=abc給標籤函數,例如:sql
默認的標籤模板保存在模板目錄/tag/目錄裏,例如&template=abc將調用模板目錄/tag/abc.htm模板來顯示數據。
若是標籤模板存放於其餘目錄,例如def,則傳遞&dir=def&template=abc,系統將調用模板目錄/def/abc.htm模板。
二、直接在模板裏循環數據數據庫
此寫法傳遞標籤模板爲null,而且直接返回數據給$tags數組,此時能夠直接在模板裏循環了。
如下爲一個完整的示例:
數組
第一種寫法通常用於屢次調用的數據,第二種寫法通常用於只調用一次的數據。
經常使用參數及含義
moduleid
moduleid指模塊ID,可在後臺模塊管理裏查詢。對於直接調用模塊的數據,設置正確的模塊ID後,將不須要傳遞table參數,系統會自動獲取。
例如傳遞moduleid=5,系統將識別爲調用供應信息,自動設置table參數爲sell。
通常狀況下,除了擴展模塊裏的功能都須要經過moduleid來調用。
table
table指表名,可在後臺數據庫維護裏查詢。對於Destoon系統表,不須要加表的前綴;對於非Destoon系統表,須要填寫完整的表名,且傳遞prefix參數。
例如對於Destoon系統表,傳遞table=announce,若是表前綴爲destoon_,系統將識別表名爲 destoon_announce。
對於非Destoon系統表,傳遞table=tb_abc&prefix=或者table=abc&prefix=tb_,系統將識別表名爲 tb_abc。
fields
fields指查詢的字段,默認爲*。能夠傳遞例如 fields=title,addtime,可是通常狀況下無需傳遞,Destoon獨有的標籤緩存機制會自動緩存查詢結果,沒必要擔憂效率問題。
condition
condition指查詢的條件,若是不傳遞,則爲1,表明任意條件的數據(此項需瞭解SQL語法)。Destoon全部模塊遵循統一標準開發,因此不少條件是通用的。
例如 status=3表示正常經過的信息、status=3 and level=1表示級別爲1的信息、status=3 and thumb<>''表示有標題圖片的信息等。
order
order指數據的排序方法(此項需瞭解SQL語法)。
例如order=addtime desc表示按添加時間降序排列、order=itemid desc表示按itemid降序排列、order=rand()表示隨機數據等。
pagesize
pagesize指調用數據的數量,若是不傳遞,默認爲10。
template
template指指定的標籤模板,若是不傳遞,默認爲list,位於模板目錄/tag/list.htm,若是傳遞爲null,表示不該用標籤模板。參見上述數據顯示過程。
debug
debug參數用於調試標籤,例如傳遞&debug=1,系統將輸出標籤構形成的SQL語句,以便驗證標籤寫法是否正確,不須要調試的標籤不用加此參數。
數據字典
參考:http://www.destoon.com/doc/develop/56.html
其餘常見用法舉例
&和and的區別
&用來分割參數,and是sql語句where後的讀取條件,兩者徹底不一樣。
多表聯合查詢
例如查詢會員名爲destoon的會員和公司資料,可使用:
{tag("table=destoon_member m,destoon_company c&prefix=&condition=m.userid=c.userid and m.username='destoon'&template=list-com")}
destoon_member和destoon_company是表的實際名稱(包含表前綴),prefix=表示系統再也不自動在表名前加前綴。
一般經過傳遞moduleid能夠實現大部分的調用,除非您確認熟悉聯合查詢,不然不推薦使用。
截至目前,系統默認模板裏尚未一個功能須要用到聯合查詢。
控制標題長度
在標籤裏傳遞length參數,例如&length=20表示20個字符長度(一個漢字佔2個字符),通常狀況建議用css隱藏多餘字符(定義height和overflow:hidden)。
傳遞length參數,系統僅對title字段自動截取,若是須要截取其餘字段,可用dsubstr函數。
例如 {dsubstr($t[company], 20, '...')} 表示截取company字段爲20個字符,截取後,結尾追加...
設置日期顯示格式
能夠在標籤裏傳遞datetype參數:
1 表示 年;
2 表示 月-日;
3 表示 年-月-日;
4 表示 月-日 時:分;
5 表示 年-月-日 時:分;
6 表示 年-月-日 時:分:秒
也能夠在模板裏直接使用date函數,例如{date('Y-m-d', $t[addtime])} 表示將時間轉換爲 年-月-日 格式
date函數的使用請參閱PHP手冊。
調用某一分類的信息
在標籤裏傳遞catid參數,例如&catid=5表示調用分類ID爲5的全部信息。
若是調用多個分類,用逗號分隔分類ID,例如 &catid=5,6,7表示調用分類ID爲五、六、7的全部信息。
分類調用默認包含子分類的信息,若是不須要包含子分類,可設置&child=0參數。
例如&catid=5&child=0表示只調用分類ID爲5的信息,不包括子分類的信息。
調用某一地區的信息
調用地區信息和上述調用分類信息的方法徹底相同,將其中的catid換爲areaid便可。
顯示信息所在分類
<a href="{$MODULE[$moduleid][linkurl]}{$CATEGORY[$t[catid]][linkurl]}">{$CATEGORY[$t[catid]][catname]}</a>
注意:自V4.0,以上寫法將不可用,須要在標籤裏傳遞&showcat=1參數,而後在模板裏寫<a href="{$t[caturl]}">{$t[catname]}</a>
控制列數
此項經常使用於圖片的佈局,可以使用cols參數。
例如調用12張圖片,一行顯示4個,共3行,則傳遞&pagesize=12&cols=4
支持cols參數的標籤模板限thumb-table.htm和list-table.htm
其中,thumb-table.htm顯示圖片列表,list-table.htm顯示文字列表
若是新建支持cols的標籤模板或直接循環$tags,可參考以上兩個模板的寫法
上述效果能夠也能夠經過CSS實現,無需使用表格,請自行書寫
顯示文章的簡介
使用{$t[introduce]}變量,若是要截取字數,例如80字符,可以使用{dsubstr($t[introduce], 80, '...')}
小結
標籤看似複雜難懂,實際上在理解各個參數的含義和調用流程後,您會了解到標籤實際簡單自由、靈活易用、功能強大。
默認模板裏已提供了大量的調用範例和標籤模板,能夠在學習中參閱和調試。
標籤調用是製做模板必備的知識,但願您能早日掌握。
緩存