模板引擎开发(一)

我自己写了一套建站系统,关于为什么我要自己写一套建站系统,而不是用网上开源的(将来我的也会开源),个中原由很多人都问过我,当然是有原因的,回头再作解释。今天就说说建站系统中的模板引擎的开发。

建站系统是基于.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%}

自定义标签中的超链接、图片链接等所有的链接地址,会根据自定义标签当前所有的页面路径自动转换。

posted @ 2013-06-04 22:35  songsoft  阅读(2318)  评论(16编辑  收藏  举报