模板引擎開發(一)


我自己寫了一套建站系統,關於為什么我要自己寫一套建站系統,而不是用網上開源的(將來我的也會開源),個中原由很多人都問過我,當然是有原因的,回頭再作解釋。今天就說說建站系統中的模板引擎的開發。

建站系統是基於.net的,為了方便使用,我也編寫了模版處理的功能,當然也需要通過一些標簽化語言將模板生成靜態網頁。我采用了類似於織夢的語言標簽,當然也有自己的特色,真正實現功能時,與織夢已經有了很大差別。我大致把實現的思路給大家講解一下,今天寫頭一篇,先介紹一下我的模板標簽,后續逐步講解如何實現其功能的。

標簽分為三大類:值標簽、組件標簽、自定義標簽

一、      值標簽

沒有任何屬性,可以出現在HTML的任何位置,類似於.net中的public值輸出。

例如:

{%=SiteName%} 輸出網站名稱

值標簽分為全局值標簽與局部值標簽,二者使用方法相同。

1.    全局值標簽

全局值標簽,指在網站所有頁面都可以引用的值。

如上例中的網站名稱{%=SiteName%}

2.    局部值標簽

局部值標簽,指出現某特定環境下的引用值;如新聞欄目的頁面,系統已知當前頁面是某個新聞的欄目,可直接引用{%=NewsColumnName%},顯示當前欄目的名稱。支持格式化化。

例如:

{%=NaTitle%}輸出新聞文章的標題

{%=NaCrtTime:yyyy年M月d日%}輸出新聞文章的創建時間,並格式化為年月日

一、      組件標簽

組件標簽主要用在頁面body主體之內,表現較為復雜的內容。可以帶有屬性。類似於.net中的組件。本來打算是<尖括號的,為了保持與html標簽的一致,后來考慮到檢索的效率問題,采用了中括號。

如新聞列表,

[ list:NewsArticle count="10"  sort="1" class="news" title="新聞列表" ]

<a href="news_{%#newsId%}.html">{%#newsTitle%}</a>

[/ list:NewsArticle ]

實際生成的HTML代碼如下

<dl count="10"  sort="1" class="news">

<dt>新聞列表</dt>

<dd><a href="news_1.html">北方沙塵天氣將持續</a></dd>

……

</dl>

上述標簽中,屬性為選填項;

組件按具體使用況,分為以下幾類:

1.    列表標簽

如:

List:NewsArticle,循環顯示文章列表,並生成dl、dd的HTML標簽,支持分頁

可以設置屬性,顯示多少條信息,哪個欄目下的文章等;

組件標簽內的html代碼將會被循環輸出。

2.    循環標簽

循環標簽與List功能相近,但不支持分頁

repeat:NewsArticle,循環顯示文章列表,純輸出,不生成多余HTML標簽

3.    單項信息標簽

內容標簽,如下例,輸出id為2的新聞文章

[Details:NewsArticle id=”2”]

……

[/ Details:NewsArticle];

組件標簽內的Html代碼會同步輸出,由於不是列表組件,不會循環輸出。

4.    標簽的簡寫

標簽前綴支持簡寫

List簡寫l、li

Repeat簡寫r、rp

Details簡寫d、de

標簽后綴同樣支持簡單,例如newsArticle,可以簡寫為na;

具體查看模板系統配置文件Template.config

二、      值綁定標簽

用於在組件標簽中顯示當前記錄的相關屬性

如前面實例如中的{%#newsTitle%}。支持格式化

如:{%#crtTime:yyyy年M月d日%}輸出 2013年3月1日

如:{%#index:00%}輸出01

類似於.net中的<%# Eval("crtTime","{0:yyyy年M月d日}")%>

三、      自定義標簽

主要用於展現一些通用內容,如頁面頂部與底部。類似於.net的組件引用。

如展示頁面頂部

{%@PageTop%}

自定義標簽中的超鏈接、圖片鏈接等所有的鏈接地址,會根據自定義標簽當前所有的頁面路徑自動轉換。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM