近日↟◕,公司要用destoon系統進行二次開發b2b平臺✘·。所以↟◕,最近在看看destoon一些內建的機制以及標籤的呼叫✘·。
之前就知道destoon是做b2b的一款cms↟◕,一直沒有實際的操作過↟◕,現在剛好有機會接觸↟◕,那麼下面我就將destoon的tag標籤呼叫方式給整理分享一下↟◕,便於學習和複習✘·。
什麼是標籤呼叫╃·☁↟╃?
標籤呼叫是根據呼叫條件(condition)從資料表(table)讀取呼叫數量(pagesize)條資料↟◕,並按排序方式(order)排序↟◕,最終透過標籤模板的佈局輸出資料✘·。
可以看出↟◕,標籤的工作分兩個部分↟◕,一是讀取資料↟◕,二是顯示資料✘·。
標籤函式原型
標籤函式保存於 include/tag.func.php
tag($parameter, $expires = 0)
$parameter 表示傳遞給tag函式的字串↟◕,系統自動將其轉換為多個變數✘·。
例如傳遞
table=destoon&pagesize=10&hello=world
系統相當於得到│◕:
$table = 'destoon';
$pagesize = 10;
$hello = 'world';
三個變數
$expires 表示標籤快取過期時間
>0 快取$expires秒;0 - 系統預設標籤快取時間;-1 - 不快取;-2 - 快取SQL結果;
一般情況保持預設不需要傳遞✘·。
資料讀取過程
例如以下標籤│◕:
<!--{tag("moduleid=5&condition=status=3&order=addtime desc&pagesize=10")}-->
會被轉換為如下的SQL語句│◕:
SELECt *
FROM db_sell
WHERe status=3
ORDER BY addtime DESC
LIMIT 0,10
讀出的資料會儲存在 $tags 數組裡
通常情況下不需要寫table=xxx↟◕,應該寫moduleid=模組ID↟◕,系統會自動對應模組的表
資料顯示過程
1₪◕◕、透過標籤模板顯示
傳遞&template=abc給標籤函式↟◕,例如│◕:
<!--{tag("moduleid=...&template=abc")}-->
預設的標籤模板儲存在模板目錄/tag/目錄裡↟◕,例如&template=abc將呼叫模板目錄/tag/abc.htm模板來顯示資料✘·。
如果標籤模板存放於其他目錄↟◕,例如def↟◕,則傳遞&dir=def&template=abc↟◕,系統將呼叫模板目錄/def/abc.htm模板✘·。
2₪◕◕、直接在模板裡迴圈資料
<!--{php $tags=tag("moduleid=...&template=null");}-->
此寫法傳遞標籤模板為null↟◕,並且直接返回資料給$tags陣列↟◕,此時可以直接在模板裡迴圈了✘·。
以下為一個完整的示例│◕:
<!--{php $tags=tag("moduleid=...&template=null");}-->
{loop $tags $t}
...
{/loop}
第一種寫法一般用於多次呼叫的資料↟◕,第二種寫法一般用於只調用一次的資料✘·。
常用引數及含義
moduleid
moduleid指模組ID↟◕,可在後臺模組管理裡查詢✘·。對於直接呼叫模組的資料↟◕,設定正確的模組ID後↟◕,將不需要傳遞table引數↟◕,系統會自動獲取✘·。
例如傳遞moduleid=5↟◕,系統將識別為呼叫供應資訊↟◕,自動設定table引數為sell✘·。
一般情況下↟◕,除了擴充套件模組裡的功能都需要透過moduleid來呼叫✘·。
table
table指表名↟◕,可在後臺數據庫維護裡查詢✘·。對於Destoon系統表↟◕,不需要加表的字首;對於非Destoon系統表↟◕,需要填寫完整的表名↟◕,且傳遞prefix引數✘·。
例如對於Destoon系統表↟◕,傳遞table=announce↟◕,如果表字首為db_↟◕,系統將識別表名為 db_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://help.destoon.com/dict.php
其他常見用法舉例
&和and的區別
&用來分割引數↟◕,and是sql語句where後的讀取條件↟◕,二者完全不同✘·。
多表聯合查詢
例如查詢會員名為destoon的會員和公司資料↟◕,可以使用│◕:
{tag("table=db_member m,db_company c&prefix=&condition=m.userid=c.userid and m.username='destoon'&template=list-com")}
db_member和db_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為5₪◕◕、6₪◕◕、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, '...')}
小結
上面就是destoon標籤的一些基本的呼叫方式以及引數✘·。看似複雜難懂↟◕,實際上在理解各個引數的含義和呼叫流程後↟◕,您會了解到標籤實際簡單自由₪◕◕、靈活易用₪◕◕、功能強大✘·。
預設模板裡已提供了大量的呼叫範例和標籤模板↟◕,可以一邊學習一邊查閱↟◕,這樣才能更好的理解熟悉destoon系統✘·。