前言
在CMS内容管理系统中,模板引擎一定是一个绕不过的话题,那么有没有好用的库呢?
mustache.js、ejs等可以为我们处理数据问题,那么页面模板、模块模板、模板复用呢?
咋以前不是做过asp.net开发吗?asp.net的模板引擎真是精妙绝伦,能不能移植过来?
说动就动,让我们撸起袖子加油干……
asp.net 代码示例
母版页
带控件的内容页
需求疑问
1、模板引用方式,能不能尽量不要创造语法,或者与其它模板引擎冲突?
2、asp:ContentPlaceHolder与asp:Content语法太长了,能优化吗?
3、先解决上面两个问题、然后再做扩展吧……。
语法创作
1、模板引用
模板路径:自拟路径磁盘、变量、数据库、网络地址只要您能读取到,都可以。
<自拟:标签名>:您想写啥就写啥,无限制。
<!-- @Register "模板路径" to <自拟:标签名> -->
2、使用模板
<自拟:标签名></自拟:标签名>
3、母版页模板及插槽
<template:自拟插槽名></template:自拟插槽名>
4、使用母版页模板、普通模板
<!-- @Register "模板路径" to <自拟:标签名> -->
<自拟:标签名>
<标签名:自拟插槽名1>
<!-- 其它html代码 -->
</标签名:自拟插槽名1>
<标签名:自拟插槽名2>
<!-- 其它html代码 -->
</标签名:自拟插槽名2>
</自拟:标签名>
5、如果模板是单个双标签,可省略插槽标签。
// 模板1
<div class="form"></div>
// 使用模板1
<!-- @Register "模板1" to <模板:模板1> -->
<模板:模板1>
<!-- 其它html代码 -->
</模板:模板1>
代码示例
模板
//master.html
<html>
<head>
<!-- header -->
<template:header></template:header>
<!-- header -->
</head>
<body>
<!-- bodyer -->
<template:bodyer></template:bodyer>
<!-- bodyer -->
</body>
</html>
使用模板
// index.html
<!-- @Register "template/default/master/master" to <view:master> -->
<!-- @Register "template/default/control/header/header" to <uc:header> -->
<!-- @Register "template/default/control/footer/footer" to <uc:footer> -->
<view:master>
<master:header>
<link rel="stylesheet" href="/static/css/index.css" />
</master:header>
<master:bodyer>
<uc:header></uc:header>
<div>您好,世界!</div>
<uc:footer></uc:footer>
</master:bodyer>
<master:footer>
<script type="text/javascript" src="/statics/js/index.js">
</master:footer>
</view:master>
渲染模板
import SHtmx from "shtmx";
// 解析模板
SHtmx.templateAnalysis({
// 最顶层那个模板路径(比如:首页)
templatePath: 'index',
// 获取模板
// 目前,templateType的默认值为:( templateType = 'html' )
template: function (path, templateType) {
// 模板内容
let viewContent: string = `未找到“${path}”!`;
// 查找模板 并获取模板内容
templates.some(item => {
item.path == path && (viewContent = (item as any)[templateType]);
return item.path == path;
});
return viewContent;
},
// 获取解析结果
result: function (viewContent: string): void {
console.log(viewContent);
}
});
好的,到这里就结束了,赶快试试吧。
人人为我,我为人人,一起加油吧。