EasyASP - 简单好用的ASP类库框架

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1083|回复: 3

EASP边聊边做CMS系列之6——关于模板和标签

[复制链接]

10

主题

21

帖子

182

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
182
发表于 2015-3-6 15:17:24 | 显示全部楼层 |阅读模式
本帖最后由 jam 于 2015-3-6 16:25 编辑

关于模板和标签我单独说明,因为我用了一种和其他系统不一样的思路,具体来说呢,对于用户可见部分的网站,它的数据和版式,我打算用两种方式来进行。
1、接口json输出数据
增强接口的可配置性,让输出的json可以尽量满足所有前端的数据格式需要。
上一版时就注重标签可视化了,后来一想,如果用户用的不是Bootstrap,而是Amaze咋办,我标签替换完之后用到的都是Bootstrap的CSS,到时就乱了,所以这次想主要用json输出数据,这样用户前端无论用什么,只要在后台把接口的格式弄对前端想怎么显示就怎么显示。
2、可视化标签
对于前端不是很熟的人呢,我们还是提供各种各样可定制的标签,只不过系统自带的标签只是支持Bootstrap,也许后期有空,会按不同前端框架增加多套标签解析的方法。

如上图,我用自增长ID做为标签的ID,用EASP的NewID做为这个标签父级层的ID,每个标签生成代码后,它的关键DOM都会用这个NewID做为ID或class属性用来让CSS选择器进行选择,这样用户不仅可以用后台标签修改时的各种基本属性的可视化设置,还可以直接在CSS文件中写入更加个性化的样式来。
除了{$ad(23)} 这种形式的标签外,还设置了很多没有ID的固定标签,如下图:

其中一部分是系统通用的,还有一部分是文章显示内容页专用的,这些标签都没有样式,都是纯文本的内容,这样就相当于把json的数据分解了,你可以在前端直接在需要的地方引用它,这是给一部分对于JS不熟悉,无法用JS分解玩转json同学准备的。

其他关于标签和模板的内容,后面做到标签和模板时会有更详细的说明。

下面附上jam_tpl.asp文件,当然,里面现在只有一部分,但大体思路已经有了,看注释吧。

[ASP,VB,VBS] 纯文本查看 复制代码
<%Dim id_,tagstr_,tag_,matches,match,Str,Str_,tag_full,tag_name,tag_id
'*********************************************************
'过程名:rep_html
'作  用:处理模板中各动态内容参数过程
'*********************************************************
Sub rep_html()
	'先替换一下引用的HTML,否则引用文件里的标签无法替换
	Easp.Tpl.LoadStr rep_include(Easp.Tpl.GetHtml)	
	'循环读取当前模板用到的所有标签
	Str = Easp.Tpl.GetHtml
	Set tag_full = Easp.List.New
	Set tag_name = Easp.List.New
	Set tag_id = Easp.List.New
	'Set matches = Easp.Str.Match(Str,"\{\$(\w+)(?:\((\d+|\S+)\))?\}")
	Set matches = Easp.Str.Match(Str,"\{\$(\w+)(?:\((\d+)\))?\}")
	For Each match In matches
		tag_full.Push(match.Value)  			'用来replace的
		tag_name.Push(match.submatches(0))  	'标签
		tag_id.Push(match.submatches(1))  		'数字
	Next
	For i = 0 To tag_id.Length-1
		Select Case tag_name(i)
			Case "title":Call rep_title(tag_full(i),tag_id(i))
			Case "sys_name":Call rep_sys_name(tag_full(i))
			Case "sys_version":Call rep_sys_version(tag_full(i))
			Case "sys_runtime":Call rep_sys_runtime(tag_full(i))
			Case "sys_rundb":Call rep_sys_rundb(tag_full(i))
		End Select
	Next 
	Set matches = Nothing
	Set tag_full = Nothing
	Set tag_name = Nothing
	Set tag_id = Nothing
End Sub

'*********************************************************
'过程名:rep_title
'参  数:tag_full     ---- 完整标签
'        tag_id       ---- 标签ID
'作  用:替换标题标签
'*********************************************************
Sub rep_title(tag_full,tag_id)
	Str_ = Easp.Tpl.GetHtml
	If Easp.isN(tag_id) Then '看ID是否为空,为空则替换为系统设置的名称
		Str_ = Easp.Str.iReplace(Str_,"{$title}",Jam.system_setting("s1"))
	Else 
		'不为空,则从标签表查询ID为tag_id的记录,按参数进行替换
		'这里因为还没有标签表,先简单做个替换
		Str_ = Easp.Str.iReplace(Str_,tag_full,Jam.system_setting("s1"))
	End If 
	Easp.Tpl.LoadStr Str_
End Sub
'*********************************************************
'过程名:sys_name 	替换系统名称标签
'*********************************************************
Sub rep_sys_name(tag_full)
	Easp.Tpl.LoadStr Easp.Str.iReplace(Easp.Tpl.GetHtml,"{$sys_name}",Jam.system_setting("s1"))
End Sub
'*********************************************************
'过程名:rep_sys_version 	替换系统版本标签
'*********************************************************
Sub rep_sys_version(tag_full)
	Easp.Tpl.LoadStr Easp.Str.iReplace(Easp.Tpl.GetHtml,"{$sys_version}",Easp.Var("jam_version"))
End Sub
'*********************************************************
'过程名:rep_sys_runtime 	替换系统运行时间标签
'*********************************************************
Sub rep_sys_runtime(tag_full)
	Easp.Tpl.LoadStr Easp.Str.iReplace(Easp.Tpl.GetHtml,"{$sys_runtime}",Easp.GetScriptTime)
End Sub
'*********************************************************
'过程名:rep_sys_rundb 	替换系统数据库操作次数标签
'*********************************************************
Sub rep_sys_rundb(tag_full)
	Easp.Tpl.LoadStr Easp.Str.iReplace(Easp.Tpl.GetHtml,"{$sys_rundb}",Easp.QueryTimes)
End Sub
'*********************************************************
'过程名:rep_include
'参  数:temp     ---- 模板字符串
'作  用:替换引用文件标签
'*********************************************************
Function rep_include(temp)
	temp = Easp.Str.iReplace(temp,"{$include}","")	'先替换一下无ID空标签,以防写错
	Do
		id_ = Jam.SearchStr(temp,"{$include(""",""")}")	'查找标签ID
		If Easp.isN(id_) Then	'ID为空了就是循环完了
			Exit Do '跳出循环
		End If 
		tagstr_ = "{$include("""&id_&""")}"	'本次循环的带ID的标签值
		tag_ = Easp.Fso.Read(id_)
		temp = Easp.Str.iReplace(temp,tagstr_,tag_)
	Loop 
	rep_include = temp
End Function
%>

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

3

主题

9

帖子

268

积分

信息监察员

Rank: 9Rank: 9Rank: 9

积分
268
发表于 2015-3-6 19:29:15 | 显示全部楼层
已经有点完善了呀,不是一点点了哦。。。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

28

积分

普通人

Rank: 1

积分
28
发表于 2015-3-7 10:51:01 | 显示全部楼层
持续关注中……
回复 支持 反对

使用道具 举报

0

主题

1

帖子

30

积分

普通人

Rank: 1

积分
30
发表于 2016-11-15 23:54:07 | 显示全部楼层
你好,模板是怎么使用的啊,有详细教程吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Lengshi Lincase Inc. ( 蜀ICP备05022485号-5

GMT+8, 2017-6-25 18:31 , Processed in 1.475642 second(s), 25 queries .

Powered by coldstone with Discuz! X

© 2008-2017 EasyASP.cn

快速回复 返回顶部 返回列表