舟山闪爸电子技术有限公司

KesionCMS 幫助
幫助首頁 模板標(biāo)簽管理 - 問題匯總

7、sql標(biāo)簽嵌套實(shí)現(xiàn)循環(huán)欄目列表效果

0 2009/8/4 16:02:14

大家好!

 一段時(shí)間沒有給大家講高級教程了,今天剛好商業(yè)區(qū)的管理員說有用戶需要這方面的需求,問我如何實(shí)現(xiàn)!其實(shí)也不難.我就給大家做個(gè)教程吧!

   用過科汛系統(tǒng)函數(shù)標(biāo)簽的"循環(huán)顯示欄目文章標(biāo)簽"的用戶可能就知道這個(gè)標(biāo)簽有一定的局限性,樣式無法自己控制.往往無法滿足自己的需求.現(xiàn)在我就教大家用sql標(biāo)簽來實(shí)現(xiàn)類似效果的制作方法

  正如標(biāo)題所說需要sql標(biāo)簽嵌套調(diào)用,但考慮到系統(tǒng)生成速度方面原因,默認(rèn)情況下科汛的sql標(biāo)簽是不支持嵌套調(diào)用的,那我們就對科汛的代碼進(jìn)行小手術(shù).請跟我來吧

 

第一步:對代碼進(jìn)行小手術(shù)(說明,升級到5.03的用戶無需要自行修改代碼)

 

  用dw等編輯工具打開KS_Cls/Kesion.Label.CommonCls.asp文件,并找到約112左右的如下代碼

  Dim DCls:Set Dcls=New DIYCls
   Content=DCls.ReplaceUserFunctionLabel(Content) 
   Set DCls=nothing
   ReplaceAllLabel =Content

   ReplaceAllLabel=DCls.ReplaceUserFunctionLabel(Content)
我們改成以下代碼

    Dim DCls:Set Dcls=New DIYCls
   Content=DCls.ReplaceUserFunctionLabel(Content)

相信有點(diǎn)asp代碼基礎(chǔ)的用戶都可以看得明白,就是當(dāng)模板文件里包括{SQL_開頭時(shí),就再一次執(zhí)行sql標(biāo)簽替換操作.正如之前說的,考慮到生成速度方面原因.如果模板里不包含{SQL_就不再替換了,所以這里的If判斷對系統(tǒng)的性能有一定的作用.因?yàn)槲覀儾⒉灰笏袠?biāo)簽都要嵌套的.

 

第二步:分析實(shí)現(xiàn)

 

制作被嵌套的文章列表(查詢KS_Article表):

sql標(biāo)簽名稱:文章循環(huán)體

sql參數(shù): 欄目ID

sql語句:select top 10 id,title,adddate from ks_article where tid='{$Param(0)}' order by id desc

sql循環(huán)體:

[loop=10]
<li><a href="{$Field(id,GetInfoUrl,1,1)}" target="_blank">{$Field(title,Text,0,...,0,)}</a></li>
[/loop]

 

制作欄目列表標(biāo)簽(查詢KS_Class欄目表)

 

sql標(biāo)簽名稱:循環(huán)欄目列表

sql語句:select top 10 id,FolderName from ks_class where tn='{$CurrClassID}' order by folderOrder

sql循環(huán)體:

<table border="0" width="100%">
[loop=10]
<tr>
 <td>{$Field(foldername,Text,0,...,0,)}</td>
</tr>
<tr>
 <td sytle="border:1px solid #cccccc">
 {SQL_文章循環(huán)體({$Field(id,GetInfoUrl,100,2)})}
</td>
</tr>
[/loop]
</table>

 

tips:上面紅色就是插入上面制作的文章列表標(biāo)簽,參數(shù){$Field(id,GetInfoUrl,100,2)}表示生成欄目ID號

 

 

 

第三步:模板調(diào)用

 

{SQL_循環(huán)欄目列表()}

    If Instr(Content,"{SQL_")<>0 Then
    Content=DCls.ReplaceUserFunctionLabel(Content)
   End If
   Set DCls=nothing
   ReplaceAllLabel =Content

100%