dasBlog有自己的一套模板引擎,最近研究了它的模版引擎的实现.
先解释一下跟它的模板引擎相关的两个概念。
Theme(主题):就是一套模版,包括所有界面。包括以下几个文件:
template:暂时不知在何处使用(可能在当前版本中并未使用)
hometemplate:首页界面
destopWebsitetmeplate:也是不知在何处使用(可能在当前版本中并未使用)
itemTemplate:单个文章显示模板
dataTemplate:以天为单位的文章列表显示模板
Macros(宏):一个模版页是由多个宏还有一些其它的HTML代码组成的。以下列举了一些宏及其作用
<%BlogStats%>:Blog状态
<%FrontPageTitleList%>:首页文章标题列表
<%PopularList(int numEntiries, int maxLength)%>:最受欢迎文章列表,可传入相应的参数
<%newtelligence.search()%>:搜索框
<%newtelligence.aspnetcontrol("themecombo.ascx")%>:主题转换的ComboBox,可以显示任何一个用户控件
从以上的几个宏,我们可以看到dasBlog的宏功能是很强大的.
以下是一个itemTemplate文件的示例:
<
div
class
="item"
>
<
div
class
="itemTitle"
>
<
img
src
="images/array.gif"
onclick
="{if((document.getElementById('<%ItemGuid%>')).style.display=='none') {(document.getElementById('<%ItemGuid%>')).style.display='block'; this.src='images/array.gif'} else {(document.getElementById('<%ItemGuid%>')).style.display='none'; this.src='images/array_2.gif'}}"
/>
<%
ItemTitle
%>
</
div
>
<
div
class
="itemContents"
>
<
div
class
="itemBody"
id
="<%ItemGuid%>"
>
<%
ItemBody
%>
</
div
>
<
div
class
="categoryLinks"
>
<%
categoryLinks
%>
</
div
>
<
div
class
="itemFooter"
>
posted on
<%
when
%>
<
a
href
="javascript:d=document;t=d.selection?(d.selection.type!='None'?
d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');
void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit',
'scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();"
title
="Store it to 365Key"
>
365Key
</
a
>
<%
permalink
%>
<%
editButton
%>
<%
commentLink
%>
<%
trackbackLink
%>
<
br
>
<%
RelatedPostList
%>
<%
trackbackList
%>
<%
ReferralList
%>
<%
enclosure
%>
</
div
>
</
div
>
</
div
>