上下文
系統生成(chéng)頁面(miàn)時(shí)將(jiāng)根據上下文來解析 STL 标簽,例如,内容模闆中使用标簽 <stl:content type="title"></stl:content>
獲取内容的标題,系統在解析這(zhè)段代碼的時(shí)候會(huì)使用當前内容作爲上下文,從而解析出正确的數據。
通常,根據默認的上下文能(néng)獲取到正确的結果,但有些情況下,需要通過(guò)屬性重新定義上下文。例如,我們希望在内容中獲取欄目名稱,可以使用标簽 <stl:channel type="title"></stl:channel>
獲得數據,但如果我們希望顯示的不是内容所屬的欄目名稱,而是特定的欄目名稱時(shí),通過(guò)默認的上下文就(jiù)無法實現了,這(zhè)時(shí)我們需要通過(guò)屬性 channelIndex 來指定欄目:<stl:channel channelIndex="欄目索引" type="title"></stl:channel>
。
我們可以通過(guò)屬性來指定上下文,也可以通過(guò)容器标簽來指定上下文,我們甚至能(néng)通過(guò)站點标簽在切換站點;同時(shí)我們還(hái)可以通過(guò)條件判斷标簽來獲取當前所處的上下文,下面(miàn)分别進(jìn)行說(shuō)明。
切換上下文
channelIndex 欄目索引
欄目索引是一個站點中欄目的标識,具有唯一性。
如果設置了 channelIndex 屬性,系統將(jiāng)尋找對(duì)應索引的欄目并將(jiāng)上下文切換到此欄目。
<!-- 鏈接到首頁 -->
<stl:a channelIndex="首頁"></stl:a>
2
channelName 欄目名稱
欄目名稱可以重複,所以應該盡量避免使用欄目名稱來切換上下文,但是如果 channelName 與 channelIndex 屬性配合使用,系統將(jiāng)首先定位到 channelIndex 索引所在的欄目,之後(hòu)再尋找此欄目下欄目名稱爲 channelName 的欄目。
<!-- 鏈接到當前欄目下的名稱爲“欄目名稱”的欄目 -->
<stl:a channelName="欄目名稱"></stl:a>
2
<!-- 鏈接到“欄目索引”下的名稱爲“欄目名稱”的欄目 -->
<stl:a channelIndex="欄目索引" channelName="欄目名稱"></stl:a>
2
parent 父欄目
將(jiāng)上下文切換到當前欄目的上一級欄目。
- "true" 表示切換到當前欄目的上一級欄目,等價于 upLevel="1"。
- "false" 表示不切換到當前欄目的上一級欄目。
如果同時(shí)設置了 parent 以及 channelIndex 屬性,系統將(jiāng)首先定位到 channelIndex 欄目索引所在的欄目,之後(hòu)再切換到對(duì)應欄目的上級欄目。
<!-- 鏈接到當前欄目的上一級欄目 -->
<stl:a parent="true"></stl:a>
2
upLevel 上 N 級欄目
切換到上級欄目,1 爲上一級欄目,2 爲上兩(liǎng)級欄目,以此類推。
如果同時(shí)設置了 upLevel 以及 channelIndex 屬性,系統將(jiāng)首先定位到 channelIndex 欄目索引所在的欄目,之後(hòu)再切換到對(duì)應欄目的上 N 級欄目。
<!-- 鏈接到當前欄目的上兩(liǎng)級欄目 -->
<stl:a upLevel="2"></stl:a>
2
topLevel 第 N 級欄目
切換到從首頁向(xiàng)下第 N 個級别的欄目,0 代表切換到首頁,1 代表一級欄目,2 代表二級欄目,以此類推。
<!-- 鏈接到一級欄目 -->
<stl:a topLevel="1"></stl:a>
2
context 列表上下文
通常如果标簽被嵌套在列表元素中時(shí),系統會(huì)設置上下文爲當前的列表類型,同時(shí)對(duì)标簽進(jìn)行解析時(shí)也將(jiāng)根據列表類型進(jìn)行判斷,如將(jiāng) <stl:a></stl:a>
放到内容列表以及欄目列表中時(shí),stl:a 标簽的鏈接會(huì)分别顯示内容的連接以及欄目的連接。
如果希望<stl:a></stl:a>
标簽無論在内容列表還(hái)是欄目列表都(dōu)隻顯示欄目鏈接,可以設置 context 屬性爲 Channel:<stl:a context="channel"></stl:a>
- "default" 默認,即當前所處上下文。
- "content" 内容上下文。
- "channel" 欄目上下文。
- "sqlContent" Sql 内容上下文。
- "Special" 專題上下文
- "site" 站點上下文。
<!-- 分别顯示欄目與内容鏈接 -->
<stl:channels>
<stl:contents>
欄目:<stl:a context="channel"></stl:a>
内容:<stl:a></stl:a>
</stl:contents>
</stl:channels>
2
3
4
5
6
7
通過(guò)容器指定上下文
如果希望一段代碼無論放到什麼(me)位置,都(dōu)解析爲同樣的結果,可以使用 <stl:container>
將(jiāng)這(zhè)段代碼嵌套進(jìn)來并設置屬性指定的上下文。請參考:<stl:container>
容器元素
<stl:container channelIndex="欄目索引">
欄目:<stl:channel type="title"></stl:channel>
此欄目下的内容:
<stl:contents>
<stl:a></stl:a>
</stl:contents>
</stl:container>
2
3
4
5
6
7
切換網站
如果在本站點的模闆中顯示其他站點的數據,可以通過(guò)<stl:site>
元素切換站點,此元素中嵌套的标簽都(dōu)將(jiāng)解析爲指定站點的數據。請參考:<stl:site>
站點元素
<stl:site siteDir="MySite">
...
</stl:site>
2
3
判斷上下文
如果希望對(duì)上下文進(jìn)行判斷,從而使用不同的标簽,可以通過(guò)<stl:if>
元素判斷上下文,根據判斷結果嵌套不同的标簽。請參考:<stl:if>
判斷元素
判斷當前欄目名稱是否爲"欄目名稱"
<stl:if type="ChannelName" op="Equals" value="欄目名稱">
<stl:yes> <p>true</p> </stl:yes>
<stl:no> <p>false</p> </stl:no>
</stl:if>
2
3
4
根據模闆類型顯示不同内容
下面(miàn)的例子判斷當前模闆是不是内容模闆。
<stl:if type="TemplateType" op="Equals" value="ContentTemplate">
<stl:yes>
這(zhè)是内容頁面(miàn)
</stl:yes>
<stl:no>
這(zhè)不是内容頁面(miàn)
</stl:no>
</stl:if>
2
3
4
5
6
7
8
根據模闆名稱顯示不同内容
下面(miàn)的例子根據當前模闆的模闆名稱顯示不同的内容。
<stl:if type="TemplateName" op="Equals" value="系統首頁模闆">
<stl:yes>
<li><A href="/" class="current">首 頁</A></li>
</stl:yes>
<stl:no>
<li>我不是首頁</li>
</stl:no>
</stl:if>
2
3
4
5
6
7
8