上下文

系統生成(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>
1
2

channelName 欄目名稱

欄目名稱可以重複,所以應該盡量避免使用欄目名稱來切換上下文,但是如果 channelName 與 channelIndex 屬性配合使用,系統將(jiāng)首先定位到 channelIndex 索引所在的欄目,之後(hòu)再尋找此欄目下欄目名稱爲 channelName 的欄目。

<!-- 鏈接到當前欄目下的名稱爲“欄目名稱”的欄目 -->
<stl:a channelName="欄目名稱"></stl:a>
1
2
<!-- 鏈接到“欄目索引”下的名稱爲“欄目名稱”的欄目 -->
<stl:a channelIndex="欄目索引" channelName="欄目名稱"></stl:a>
1
2

parent 父欄目

將(jiāng)上下文切換到當前欄目的上一級欄目。

  • "true" 表示切換到當前欄目的上一級欄目,等價于 upLevel="1"。
  • "false" 表示不切換到當前欄目的上一級欄目。

如果同時(shí)設置了 parent 以及 channelIndex 屬性,系統將(jiāng)首先定位到 channelIndex 欄目索引所在的欄目,之後(hòu)再切換到對(duì)應欄目的上級欄目。

<!-- 鏈接到當前欄目的上一級欄目 -->
<stl:a parent="true"></stl:a>
1
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>
1
2

topLevel 第 N 級欄目

切換到從首頁向(xiàng)下第 N 個級别的欄目,0 代表切換到首頁,1 代表一級欄目,2 代表二級欄目,以此類推。

<!-- 鏈接到一級欄目 -->
<stl:a topLevel="1"></stl:a>
1
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>
1
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>
1
2
3
4
5
6
7

切換網站

如果在本站點的模闆中顯示其他站點的數據,可以通過(guò)<stl:site> 元素切換站點,此元素中嵌套的标簽都(dōu)將(jiāng)解析爲指定站點的數據。請參考:<stl:site> 站點元素

<stl:site siteDir="MySite">
  ...
</stl:site>
1
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>
1
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>
1
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>
1
2
3
4
5
6
7
8