• 模板引擎开发(一)


    模板引擎开发(一)

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

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

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

     
     
    分类: 模板引擎
  • 相关阅读:
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1105:数组逆序重存放
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1106:年龄与疾病
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1105:数组逆序重存放
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1104:计算书费
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1104:计算书费
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1104:计算书费
    configparser
    python中split()、os.path.split()函数用法
    DOS命令
    adb安装及使用
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3118084.html
Copyright © 2020-2023  润新知