anCMS (C# 版) 採用「標籤替換」核心機制:解析 HTML 模板中的自定義標籤,動態轉換為可執行的 ASPX 程式碼並執行。本文揭秘核心類 HtmlToAspxMethod 與 ConvertHtmlToAspx 的完整實現邏輯。
負責定義標籤名稱映射、正則表達式模式、參數提取、佔位符替換、URL 路由生成、分頁標籤處理、分割循環邏輯等核心功能。
list → TextFile listpager → TextFilePager
alist → Article alistpager → ArticlePager
plist → Products plistpager → ProductsPager
olist → One olistpager → OnePager
clist → Category clistpager → CategoryPager
llist → Link llistpager → LinkPager
ilist → Images ilistpager → ImagesPager
AllMethodContentRegex:匹配完整標籤塊(含內容)AllMethodRegex:提取單個標籤聲明MethodNameRegex / MethodFiledRegex:解析方法名與參數ValueOneRegex / ValueOneToStringFormartRegex:處理 ${n} 與 ${n|format} 佔位符UrlRouteRegex / PagingRegex:生成路由與分頁程式碼FnSplitRegex:實現 循環邏輯HtmlFiledToAspxFiled 將標籤屬性轉為強型別 AspxFiled 物件,包含欄位、排序、分類、關鍵字、分頁數、當前頁等屬性。
AspxMethodDataSet:生成資料源填充程式碼(MyHashtable.Add(...))AspxMethodDataRow:生成資料繫結迴圈(foreach (var a in myRows))ServerFunction:包裝為 <script runat="server"> 伺服器端腳本塊AllToAspx 預處理:全域佔位符替換($categoryname、URL 路由、分頁、分割標籤)HrefHtml)MyHashtable 緩存資料集,減少重複查詢public static string Paging(string content) {
// $pager[list][Category=$category$][15]
// → <%=Paging("list",new{Category=$category$},15,a[0])%>
foreach (string s in Method.RegexStr(PagingRegex, content)) {
// 解析參數,構造 Paging 呼叫程式碼
content = content.Replace(s, generatedCode);
}
return content;
}
public static string FnSplit(string content) {
// ${field}[,]...
// 生成 foreach(var s in arr.Split(',')) 迴圈
}
anCMS 展示了「約定優於配置」的輕量級 CMS 核心思想:以最小代價實現最大靈活性。雖代碼看似「膚淺」,卻精準解決了模板與數據分離、動態編譯、擴展性等核心問題,是中小型企業站點的理想選擇。