CMS模板引擎 XHtmlAction

2021-09-21 10:12:57 字數 3698 閱讀 1473

先說說大夥關心的工作上的事,在上家公司任了乙個多月的技術經理後,和公司中止了合作關係。

主要原因在於一開始的待遇沒談的太清楚:

1:沒有合同,沒有公積金,連社保也沒交。

2:工資的30%變成了績效(對我還實行特例,按季度或按專案發,而且績效只有按期完成(發)與沒完成(不發))

3:稅後的問題,要自己去弄發票來填。

只能說緣來的太快,份走的也太快。

對於工作上的事,乙個多月的時間,從需求文件到概要文件到詳細文件,到產品原型到系統架構,基本上已經走完了。

專案成員也招聘完成,開發的按我的計畫穩定的進行著,所有的技術難點,我都提前解決了。

雖然人走,但後續剩下點的任務也安排好了,剩下的開發有種沒了我依然一切如舊的悲涼感覺。

交待完前事,下面進入技術正題。

如圖有兩種檢視引擎:

載入模板(aspx、cshtml)-》呼叫引擎解析成(語法樹)-》生成cs**-》動態編繹-》返回最終模板。

相對來說,這種模板引擎,效能相對來說會下降一些,但是搭載vs ied的智慧型提示,和大夥多年的開發習慣,已經佔據了主流。

這裡也有篇razor的原理基礎文章,可供參考: 

原始碼目錄截圖:

xhtmlaction模板引擎的基本原理:

和asp.net自帶的模板引擎比較,這裡沒有語法樹、生成**和動態編繹過程,因此可以得到高效能的體驗。

另外相對來說,對xml及xpath語法的操作進行了封裝,簡化了很多後台開發**。

當然相對缺點就是不能在模板裡混合寫後台**了,換個說法是沒有強大的ide智慧型提示(若換個角度看,也成優點,模板和後台**真正分離了)。

xhtmlaction實現也相當的輕量級,一共就6個檔案,老少皆宜,有興趣研究的可以看 cyq.data v4.55的原始碼:

曾經也寫過兩篇相關的文章:

1:多語言的(mutillanguage),可以讓你很輕鬆的編寫多語言**:

實戰篇-簡單多語言的實現

2:xhmlaction的使用(以前類名叫xmlhelper,用法是一樣的):cyq.data.xml xmlhelper 助你更方便快捷的操作xml/html

除了介紹的(xmlhelper)用法,最近v5版本增加了「cms標籤替換」功能,下面介紹。

先寫個函式,建立文字資料庫和新增資料:

//建立檔案資料庫,並新增50條資料。

void txtdbcreate()

, new sqldbtype );

using (maction action = 

new maction(

"demo

"))

}}

該**執行後,生成兩個檔案:demo.ts(表結構)demo.txt(json格式的表資料)

文字裡的json資料:

文字資料庫相當於建立好了,配置裡新增一行資料庫鏈結請求:

<

connectionstrings

>

<

add 

name

="conn"

connectionstring

="txt path="

/>

connectionstrings

>

弄好資料庫,可以寫**了,單條資料的標籤替換:

protected

void page_load(

object sender, eventargs e)

"divfor", settype.innerxml);

}response.write(xml.outxml);

//輸出模板

}}

**解答:

**的關鍵就在於方法:loaddata(mdatarow,autosetvaluepre)

只要把資料行賦給模板,加乙個任意字首,之後就可以在html中任意使用: 或或來代表資料的值。

'#','-'是預設的字首分隔符號,任意使用其一都可。

這個是因為大多數的模板引擎都採用這種,故採用這種通用方式。

上面的**中,有兩行是注釋的,是多行資料的(表迴圈),方法是:loaddata(mdatatable);

如果把上面的**注釋放開,html如下:

doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" ""

>

<

html 

xmlns

="">

<

head

>

<

title

>

title

>

head

>

<

body

>

<

div 

title

="單條資料"

>

單條資料: -

div>

<

hr />

<

div 

id="divfor"

title

="多條資料"

對於乙個html,可能涉及到相同的欄位名(同表的不同行資料,不同表的資料)需要標籤替換,因此loaddata(資料行,字首)方法需要字首來區分。

同時字首也可以傳空"",不使用字首(但要注釋避免和其它的衝突)。

對於行的資料,是在獲取xml.outxml屬性的時候才處理,因為對於標籤,可以存在任意地方,因此不能以節點來處理,只能在最終輸的時候,拿到html,再用正則替換。

對於**的輸出,需要獲取某個節點,以對節點下的內容,進行轉殖複製迴圈輸出,由於已經存在節點,所以在xml.setforeach的時候就處理了。

如果涉及到字段格式化,仍按setforeach的事件處理即可。

本文及示例介紹的是標籤替換的功能,節點替換的操作方式,仍和以前的操作方式一致。

對於web開發框架,主打關鍵就三塊:url重寫(路由)、模板引擎(檢視引擎)、資料層框架(orm)。

如果你能掌控或自由實現這三模組,你的開發方式選擇就自由化很多,如果不能,你只能局域於微軟給你的webform和mvc。

對於框架,有時候研究的再深,也不如自己寫乙個淺的。

CMS模板引擎 XHtmlAction

先說說大夥關心的工作上的事,在上家公司任了乙個多月的技術經理後,和公司中止了合作關係。主要原因在於一開始的待遇沒談的太清楚 1 沒有合同,沒有公積金,連社保也沒交。2 工資的30 變成了績效 對我還實行特例,按季度或按專案發,而且績效只有按期完成 發 與沒完成 不發 3 稅後的問題,要自己去弄發票來...

NVelocity模板引擎

因此決定自學一下nvelocity的使用 拋開monorail 安裝後,在其下的bin目錄中可找到nvelocity.dll net專案中將用到 並將其複製出來放到我的測試web bin目錄下。到castleproject上看了一下using it大致有四步 先要引入以下命名空間 using com...

twig模板引擎

twig是乙個靈活 高效並且安全的php模板引擎。如果你使用過smarty django或者jinja這類基於文字的模板引擎的話,那麼你會覺得twig是很自然而然的事情。twig嚴格遵守了php的信念,同時增加了在模板環境中很有用的函式,這些做法使得twig不論是對設計師還是開發人員,都是非常友好的...