anCMS 採用模板標籤預處理機制:HTML 模板中的自定義標籤經解析替換,生成可直接執行的 ASP.NET 伺服器端代碼。本文通過兩個完整實例演示轉換全過程。
<!--{an:alist filed=[title,time] category=[#] num=[10] page=[true] sort=[time desc]}-->
<li><span class="fr_time">${2}</span><a href="$href[articleview][{"id",#0}]">${1}</a></li>
<!--{/an}-->
說明: $href[articleview][{"id",#0}] 代表生成 URL:/article/view/{id},後續文章將詳細解析路由機制。
<script runat="server">
protected override void OnLoad(EventArgs e) {
MyHashtable.Add("DFE3B56EB5D720382BB90CF468D83C35",
Article("TextFile.ID,title,time", 1, 8, "time desc", "", "", ""));
}
</script>
<%
if(1==1) {
var myRows = MyRows("DFE3B56EB5D720382BB90CF468D83C35");
if (myRows != null) {
foreach (var a in myRows) { %>
<li>
<span class="fr_time"><%=TimeFormart(a[2],"yyyy-MM-dd")%></span>
<a href="<%=UrlRoute("articleview",new string[,]{ {"id",a[0].ToString()}})%>"><%=a[1]%></a>
</li>
<% }
} else { %>
<p style='margin:10px;'>沒有相關信息</p>
<% }
} %>
MyHashtable,鍵為 MD5 生成的唯一標識,值為業務方法 Article(...) 返回的資料集。MyRows(key) 取得資料,迴圈輸出模板內容,佔位符 ${n} 對應陣列索引 a[n]。TimeFormart(a[2],"yyyy-MM-dd") 處理時間顯示。UrlRoute("articleview", new string[,]{{"id",a[0].ToString()}}) 動態生成友好 URL。<!--{an:alistpager category=[#]}-->
$pager[articlelist][{"category","#category"}][10]
<!--{/an}-->
分頁效果圖: 
<script runat="server">
protected override void OnLoad(EventArgs e) {
MyHashtable.Add("386D9595D2FBD4C65F5D1B28BAA8FD96", ArticlePager("","#",""));
}
</script>
<%
if(1==1) {
var myRows = MyRows("386D9595D2FBD4C65F5D1B28BAA8FD96");
if (myRows != null) {
foreach (var a in myRows) { %>
<%=Paging("articlelist",new string[,]{{"category","#category"}},10,a[0])%>
<% }
} else { %>
<p style='margin:10px;'>沒有相關信息</p>
<% }
} %>
ArticlePager 返回分頁所需的總記錄數等元數據Paging(...) 方法根據傳入參數(列表名、查詢條件、每頁數量、總記錄數)生成完整分頁 HTML$pager[...] 即可輸出完整分頁導航目前 anCMS 核心功能已覆蓋企業站點 90% 以上需求,會員系統正在開發中。作者獨自開發,技術術語可能不規範,猶豫是否開源,但決定發文自勉,期待同行交流指正。
「包羅萬象,基本上所有的綁定數據都可以用了。」—— 以最小核心解決最大共性問題,是優秀框架設計的精髓。