什么是標(biāo)簽調(diào)用,?
標(biāo)簽調(diào)用是根據(jù)調(diào)用條件(condition)從數(shù)據(jù)表(table)讀取調(diào)用數(shù)量(pagesize)條數(shù)據(jù),,并按排序方式(order)排序,最終通過標(biāo)簽?zāi)0宓牟季州敵鰯?shù)據(jù),。
可以看出,,標(biāo)簽的工作分兩個部分,一是讀取數(shù)據(jù),,二是顯示數(shù)據(jù)。
標(biāo)簽函數(shù)原型
標(biāo)簽函數(shù)保存于 include/tag.func.php
例如傳遞 table=destoon&pagesize=10&hello=world
系統(tǒng)相當(dāng)于得到:
$table = 'destoon';
$pagesize = 10;
$hello = 'world';
三個變量
$expires 表示標(biāo)簽緩存過期時間
>0 緩存$expires秒;0 - 系統(tǒng)默認(rèn)標(biāo)簽緩存時間,;-1 - 不緩存,;-2 - 緩存SQL結(jié)果;
一般情況保持默認(rèn)不需要傳遞,。
數(shù)據(jù)讀取過程
例如以下標(biāo)簽:
通常情況下不需要寫table=xxx,,應(yīng)該寫moduleid=模塊ID,系統(tǒng)會自動對應(yīng)模塊的表
數(shù)據(jù)顯示過程
1,、通過標(biāo)簽?zāi)0屣@示
傳遞&template=abc給標(biāo)簽函數(shù),,例如:
如果標(biāo)簽?zāi)0宕娣庞谄渌夸?,例如def,則傳遞&dir=def&template=abc,,系統(tǒng)將調(diào)用模板目錄/def/abc.htm模板,。
2、直接在模板里循環(huán)數(shù)據(jù)
以下為一個完整的示例:
第一種寫法一般用于多次調(diào)用的數(shù)據(jù),,第二種寫法一般用于只調(diào)用一次的數(shù)據(jù),。
常用參數(shù)及含義
moduleid
moduleid指模塊ID,可在后臺模塊管理里查詢,。對于直接調(diào)用模塊的數(shù)據(jù),,設(shè)置正確的模塊ID后,,將不需要傳遞table參數(shù),系統(tǒng)會自動獲取,。
例如傳遞moduleid=5,,系統(tǒng)將識別為調(diào)用供應(yīng)信息,自動設(shè)置table參數(shù)為sell,。
一般情況下,,除了擴展模塊里的功能都需要通過moduleid來調(diào)用。
table
table指表名,,可在后臺數(shù)據(jù)庫維護里查詢,。對于DESTOON系統(tǒng)表,不需要加表的前綴,;對于非DESTOON系統(tǒng)表,,需要填寫完整的表名,且傳遞prefix參數(shù),。
例如對于DESTOON系統(tǒng)表,,傳遞table=announce,如果表前綴為destoon_,,系統(tǒng)將識別表名為 destoon_announce,。
對于非DESTOON系統(tǒng)表,傳遞table=tb_abc&prefix=或者table=abc&prefix=tb_,,系統(tǒng)將識別表名為 tb_abc,。
fields
fields指查詢的字段,默認(rèn)為*,??梢詡鬟f例如 fields=title,addtime,但是一般情況下無需傳遞,,DESTOON獨有的標(biāo)簽緩存機制會自動緩存查詢結(jié)果,,不必?fù)?dān)心效率問題。
condition
condition指查詢的條件,,如果不傳遞,,則為1,代表任意條件的數(shù)據(jù)(此項需了解SQL語法),。DESTOON所有模塊遵循統(tǒng)一標(biāo)準(zhǔn)開發(fā),,所以很多條件是通用的。
例如 status=3表示正常通過的信息,、status=3 and level=1表示級別為1的信息,、status=3 and thumb<>''表示有標(biāo)題圖片的信息等。
order
order指數(shù)據(jù)的排序方法(此項需了解SQL語法)。
例如order=addtime desc表示按添加時間降序排列,、order=itemid desc表示按itemid降序排列,、order=rand()表示隨機數(shù)據(jù)等。
pagesize
pagesize指調(diào)用數(shù)據(jù)的數(shù)量,,如果不傳遞,,默認(rèn)為10。
template
template指指定的標(biāo)簽?zāi)0?,如果不傳遞,,默認(rèn)為list,位于模板目錄/tag/list.htm,,如果傳遞為null,,表示不應(yīng)用標(biāo)簽?zāi)0濉⒁娚鲜鰯?shù)據(jù)顯示過程,。
debug
debug參數(shù)用于調(diào)試標(biāo)簽,,例如傳遞&debug=1,系統(tǒng)將輸出標(biāo)簽構(gòu)造成的SQL語句,,以便驗證標(biāo)簽寫法是否正確,,不需要調(diào)試的標(biāo)簽不用加此參數(shù)。
數(shù)據(jù)字典
參考:http://www.destoon.com/doc/develop/56.html
其他常見用法舉例
&和and的區(qū)別
&用來分割參數(shù),,and是sql語句where后的讀取條件,二者完全不同,。
多表聯(lián)合查詢
例如查詢會員名為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=表示系統(tǒng)不再自動在表名前加前綴,。
通常通過傳遞moduleid可以實現(xiàn)大部分的調(diào)用,,除非您確認(rèn)熟悉聯(lián)合查詢,否則不推薦使用,。
截至目前,,系統(tǒng)默認(rèn)模板里還沒有一個功能需要用到聯(lián)合查詢。
控制標(biāo)題長度
在標(biāo)簽里傳遞length參數(shù),,例如&length=20表示20個字符長度(一個漢字占2個字符),,一般情況建議用css隱藏多余字符(定義height和overflow:hidden)。
傳遞length參數(shù),,系統(tǒng)僅對title字段自動截取,,如果需要截取其他字段,可用dsubstr函數(shù),。
例如 {dsubstr($t[company], 20, '...')} 表示截取company字段為20個字符,,截取后,結(jié)尾追加...
設(shè)置日期顯示格式
可以在標(biāo)簽里傳遞datetype參數(shù):
1 表示 年;
2 表示 月-日,;
3 表示 年-月-日,;
4 表示 月-日 時:分;
5 表示 年-月-日 時:分,;
6 表示 年-月-日 時:分:秒
也可以在模板里直接使用date函數(shù),,例如{date('Y-m-d', $t[addtime])} 表示將時間轉(zhuǎn)換為 年-月-日 格式
date函數(shù)的使用請參閱PHP手冊。
調(diào)用某一分類的信息
在標(biāo)簽里傳遞catid參數(shù),,例如&catid=5表示調(diào)用分類ID為5的所有信息,。
如果調(diào)用多個分類,用逗號分隔分類ID,,例如 &catid=5,6,7表示調(diào)用分類ID為5,、6、7的所有信息,。
分類調(diào)用默認(rèn)包含子分類的信息,,如果不需要包含子分類,可設(shè)置&child=0參數(shù),。
例如&catid=5&child=0表示只調(diào)用分類ID為5的信息,,不包括子分類的信息。
調(diào)用某一地區(qū)的信息
調(diào)用地區(qū)信息和上述調(diào)用分類信息的方法完全相同,,將其中的catid換為areaid即可,。
顯示信息所在分類
控制列數(shù)
此項常用于圖片的布局,可使用cols參數(shù),。
例如調(diào)用12張圖片,,一行顯示4個,共3行,,則傳遞&pagesize=12&cols=4
支持cols參數(shù)的標(biāo)簽?zāi)0逑辴humb-table.htm和list-table.htm
其中,,thumb-table.htm顯示圖片列表,list-table.htm顯示文字列表
如果新建支持cols的標(biāo)簽?zāi)0寤蛑苯友h(huán)$tags,,可參考以上兩個模板的寫法
上述效果可以也可以通過CSS實現(xiàn),,無需使用表格,請自行書寫
顯示文章的簡介
使用{$t[introduce]}變量,,如果要截取字?jǐn)?shù),,例如80字符,可使用{dsubstr($t[introduce], 80, '...')}
小結(jié)
標(biāo)簽看似復(fù)雜難懂,,實際上在理解各個參數(shù)的含義和調(diào)用流程后,,您會了解到標(biāo)簽實際簡單自由,、靈活易用、功能強大,。
默認(rèn)模板里已提供了大量的調(diào)用范例和標(biāo)簽?zāi)0?,可以在學(xué)習(xí)中參閱和調(diào)試。
標(biāo)簽調(diào)用是制作Destoon模板必備的知識,,希望您能早日掌握,。
標(biāo)簽調(diào)用是根據(jù)調(diào)用條件(condition)從數(shù)據(jù)表(table)讀取調(diào)用數(shù)量(pagesize)條數(shù)據(jù),,并按排序方式(order)排序,最終通過標(biāo)簽?zāi)0宓牟季州敵鰯?shù)據(jù),。
可以看出,,標(biāo)簽的工作分兩個部分,一是讀取數(shù)據(jù),,二是顯示數(shù)據(jù)。
標(biāo)簽函數(shù)原型
標(biāo)簽函數(shù)保存于 include/tag.func.php
tag($parameter, $expires = 0)
$parameter 表示傳遞給tag函數(shù)的字符串,,系統(tǒng)自動將其轉(zhuǎn)換為多個變量,。例如傳遞 table=destoon&pagesize=10&hello=world
系統(tǒng)相當(dāng)于得到:
$table = 'destoon';
$pagesize = 10;
$hello = 'world';
三個變量
$expires 表示標(biāo)簽緩存過期時間
>0 緩存$expires秒;0 - 系統(tǒng)默認(rèn)標(biāo)簽緩存時間,;-1 - 不緩存,;-2 - 緩存SQL結(jié)果;
一般情況保持默認(rèn)不需要傳遞,。
數(shù)據(jù)讀取過程
例如以下標(biāo)簽:
<!--{tag("moduleid=5&condition=status=3&order=addtime desc&pagesize=10")}-->
會被轉(zhuǎn)換為如下的SQL語句:
SELECt *
FROM destoon_sell
WHERe status=3
ORDER BY addtime DESC
LIMIT 0,10
讀出的數(shù)據(jù)會保存在 $tags 數(shù)組里FROM destoon_sell
WHERe status=3
ORDER BY addtime DESC
LIMIT 0,10
通常情況下不需要寫table=xxx,,應(yīng)該寫moduleid=模塊ID,系統(tǒng)會自動對應(yīng)模塊的表
數(shù)據(jù)顯示過程
1,、通過標(biāo)簽?zāi)0屣@示
傳遞&template=abc給標(biāo)簽函數(shù),,例如:
<!--{tag("moduleid=...&template=abc")}-->
默認(rèn)的標(biāo)簽?zāi)0灞4嬖?span id="5flxh5z9wniq" class="f1">模板目錄/tag/目錄里,例如&template=abc將調(diào)用模板目錄/tag/abc.htm模板來顯示數(shù)據(jù),。如果標(biāo)簽?zāi)0宕娣庞谄渌夸?,例如def,則傳遞&dir=def&template=abc,,系統(tǒng)將調(diào)用模板目錄/def/abc.htm模板,。
2、直接在模板里循環(huán)數(shù)據(jù)
<!--{php $tags=tag("moduleid=...&template=null");}-->
此寫法傳遞標(biāo)簽?zāi)0鍨閚ull,,并且直接返回數(shù)據(jù)給$tags數(shù)組,,此時可以直接在模板里循環(huán)了。以下為一個完整的示例:
<!--{php $tags=tag("moduleid=...&template=null");}-->
{loop $tags $t}
...
{/loop}
{loop $tags $t}
...
{/loop}
第一種寫法一般用于多次調(diào)用的數(shù)據(jù),,第二種寫法一般用于只調(diào)用一次的數(shù)據(jù),。
常用參數(shù)及含義
moduleid
moduleid指模塊ID,可在后臺模塊管理里查詢,。對于直接調(diào)用模塊的數(shù)據(jù),,設(shè)置正確的模塊ID后,,將不需要傳遞table參數(shù),系統(tǒng)會自動獲取,。
例如傳遞moduleid=5,,系統(tǒng)將識別為調(diào)用供應(yīng)信息,自動設(shè)置table參數(shù)為sell,。
一般情況下,,除了擴展模塊里的功能都需要通過moduleid來調(diào)用。
table
table指表名,,可在后臺數(shù)據(jù)庫維護里查詢,。對于DESTOON系統(tǒng)表,不需要加表的前綴,;對于非DESTOON系統(tǒng)表,,需要填寫完整的表名,且傳遞prefix參數(shù),。
例如對于DESTOON系統(tǒng)表,,傳遞table=announce,如果表前綴為destoon_,,系統(tǒng)將識別表名為 destoon_announce,。
對于非DESTOON系統(tǒng)表,傳遞table=tb_abc&prefix=或者table=abc&prefix=tb_,,系統(tǒng)將識別表名為 tb_abc,。
fields
fields指查詢的字段,默認(rèn)為*,??梢詡鬟f例如 fields=title,addtime,但是一般情況下無需傳遞,,DESTOON獨有的標(biāo)簽緩存機制會自動緩存查詢結(jié)果,,不必?fù)?dān)心效率問題。
condition
condition指查詢的條件,,如果不傳遞,,則為1,代表任意條件的數(shù)據(jù)(此項需了解SQL語法),。DESTOON所有模塊遵循統(tǒng)一標(biāo)準(zhǔn)開發(fā),,所以很多條件是通用的。
例如 status=3表示正常通過的信息,、status=3 and level=1表示級別為1的信息,、status=3 and thumb<>''表示有標(biāo)題圖片的信息等。
order
order指數(shù)據(jù)的排序方法(此項需了解SQL語法)。
例如order=addtime desc表示按添加時間降序排列,、order=itemid desc表示按itemid降序排列,、order=rand()表示隨機數(shù)據(jù)等。
pagesize
pagesize指調(diào)用數(shù)據(jù)的數(shù)量,,如果不傳遞,,默認(rèn)為10。
template
template指指定的標(biāo)簽?zāi)0?,如果不傳遞,,默認(rèn)為list,位于模板目錄/tag/list.htm,,如果傳遞為null,,表示不應(yīng)用標(biāo)簽?zāi)0濉⒁娚鲜鰯?shù)據(jù)顯示過程,。
debug
debug參數(shù)用于調(diào)試標(biāo)簽,,例如傳遞&debug=1,系統(tǒng)將輸出標(biāo)簽構(gòu)造成的SQL語句,,以便驗證標(biāo)簽寫法是否正確,,不需要調(diào)試的標(biāo)簽不用加此參數(shù)。
數(shù)據(jù)字典
參考:http://www.destoon.com/doc/develop/56.html
其他常見用法舉例
&和and的區(qū)別
&用來分割參數(shù),,and是sql語句where后的讀取條件,二者完全不同,。
多表聯(lián)合查詢
例如查詢會員名為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=表示系統(tǒng)不再自動在表名前加前綴,。
通常通過傳遞moduleid可以實現(xiàn)大部分的調(diào)用,,除非您確認(rèn)熟悉聯(lián)合查詢,否則不推薦使用,。
截至目前,,系統(tǒng)默認(rèn)模板里還沒有一個功能需要用到聯(lián)合查詢。
控制標(biāo)題長度
在標(biāo)簽里傳遞length參數(shù),,例如&length=20表示20個字符長度(一個漢字占2個字符),,一般情況建議用css隱藏多余字符(定義height和overflow:hidden)。
傳遞length參數(shù),,系統(tǒng)僅對title字段自動截取,,如果需要截取其他字段,可用dsubstr函數(shù),。
例如 {dsubstr($t[company], 20, '...')} 表示截取company字段為20個字符,,截取后,結(jié)尾追加...
設(shè)置日期顯示格式
可以在標(biāo)簽里傳遞datetype參數(shù):
1 表示 年;
2 表示 月-日,;
3 表示 年-月-日,;
4 表示 月-日 時:分;
5 表示 年-月-日 時:分,;
6 表示 年-月-日 時:分:秒
也可以在模板里直接使用date函數(shù),,例如{date('Y-m-d', $t[addtime])} 表示將時間轉(zhuǎn)換為 年-月-日 格式
date函數(shù)的使用請參閱PHP手冊。
調(diào)用某一分類的信息
在標(biāo)簽里傳遞catid參數(shù),,例如&catid=5表示調(diào)用分類ID為5的所有信息,。
如果調(diào)用多個分類,用逗號分隔分類ID,,例如 &catid=5,6,7表示調(diào)用分類ID為5,、6、7的所有信息,。
分類調(diào)用默認(rèn)包含子分類的信息,,如果不需要包含子分類,可設(shè)置&child=0參數(shù),。
例如&catid=5&child=0表示只調(diào)用分類ID為5的信息,,不包括子分類的信息。
調(diào)用某一地區(qū)的信息
調(diào)用地區(qū)信息和上述調(diào)用分類信息的方法完全相同,,將其中的catid換為areaid即可,。
顯示信息所在分類
<a href="{$MODULE[$moduleid][linkurl]}{$CATEGORY[$t[catid]][linkurl]}">{$CATEGORY[$t[catid]][catname]}</a>
注意:自V4.0,以上寫法將不可用,,需要在標(biāo)簽里傳遞&showcat=1參數(shù),,然后在模板里寫<a href="{$t[caturl]}">{$t[catname]}</a>控制列數(shù)
此項常用于圖片的布局,可使用cols參數(shù),。
例如調(diào)用12張圖片,,一行顯示4個,共3行,,則傳遞&pagesize=12&cols=4
支持cols參數(shù)的標(biāo)簽?zāi)0逑辴humb-table.htm和list-table.htm
其中,,thumb-table.htm顯示圖片列表,list-table.htm顯示文字列表
如果新建支持cols的標(biāo)簽?zāi)0寤蛑苯友h(huán)$tags,,可參考以上兩個模板的寫法
上述效果可以也可以通過CSS實現(xiàn),,無需使用表格,請自行書寫
顯示文章的簡介
使用{$t[introduce]}變量,,如果要截取字?jǐn)?shù),,例如80字符,可使用{dsubstr($t[introduce], 80, '...')}
小結(jié)
標(biāo)簽看似復(fù)雜難懂,,實際上在理解各個參數(shù)的含義和調(diào)用流程后,,您會了解到標(biāo)簽實際簡單自由,、靈活易用、功能強大,。
默認(rèn)模板里已提供了大量的調(diào)用范例和標(biāo)簽?zāi)0?,可以在學(xué)習(xí)中參閱和調(diào)試。
標(biāo)簽調(diào)用是制作Destoon模板必備的知識,,希望您能早日掌握,。