在组件版中用自定义标签可以实现大部分的功能
不过自定义标签有一些限制,比如里面不能插入asp语句.我们可以参考系统标签的流程,添加自己的标签
下面举个例子,增加一个标签{$ShowArticleContent(Article)}用来显示指定文章的内容
需要修改的文件是include文件夹里面的PowerEasy.Common.Front.asp文件.
1.首先在页面中加入添加判断是否存在这个标签的代码
'替换{$ShowArticleContent(Article)}标签
regEx.Pattern = "\{\$ShowArticleContent\((.*?)\)\}"
Set Matches = regEx.Execute(strHtml)
For Each Match In Matches
arrTemp = Split(Match.SubMatches(0), ",") //0表示只有一个参数
If UBound(arrTemp) <> 0 Then
strArtcileContent = "函数式标签:{$ShowArticleContent(参数列表)}的参数个数不对。请检查模板中的此标签。"
Else
strArtcileContent = GetAC(arrTemp(0)) //这个是自己定义的取文章内容的函数
End If
strHtml = Replace(strHtml, Match.value, strArtcileContent)
Next
这段代码可以加入2277行下面
然后需要加入Dim strArtcileContent的定义.可以定义在这个文档的前面
2.加入GetAC()函数,用来获取指定id的文章内容
'==================================================
'函数名:GetArticleContent
'作 用:得到指定文章的html代码
'参 数:ArticleID
'==================================================
Function GetAC(ArticleID)
Dim sql,str,rs,ChannelDir1,UploadDir1,sqlChannel,rsChannel,TrueSiteUrl
TrueSiteUrl = Trim(Request.ServerVariables("HTTP_HOST"))
sqlChannel="select ChannelDir,UploadDir from PE_Channel where ChannelID=(select ChannelID from PE_Article where ArticleID="&ArticleID&")"
Set rsChannel = Conn.Execute(sqlChannel)
If Not(rsChannel.BOF And rsChannel.EOF) Then
ChannelDir1=rsChannel("ChannelDir")
UploadDir1=rsChannel("UploadDir")
rsChannel.Close
Set rsChannel = Nothing
end if
sql="select Content from PE_Article where ArticleID="&ArticleID
Set rs = Conn.Execute(sql)
If rs.BOF And rs.EOF Then
str = "找不到相应文章的内容"
Else
str = ReplaceKeyLink(ReplaceText(Replace(Replace(rs("Content") & "", "[ InstallDir_ChannelDir ]", "http://" & TrueSiteUrl & InstallDir&ChannelDir1 & "/"), "{ $UploadDir }", UploadDir1), 1))
str = Replace(str,"onmousewheel=""return bbimg(this)""", "")
str = Replace(str,"onload=resizepic(this)", "")
End If
rs.Close
Set rs = Nothing
GetAC = str
End Function
ps
[ InstallDir_ChannelDir ]还有{ $UploadDir }中的空格需要去掉,因为直接发出来代码会给替换掉所以这里做了处理
这些代码可以加在287行下面
保存之后.在模版页中插入{$ShowArticleContent(参数)},参数是文章的id,就可以取出指定id文章的内容