账号通
    

账号  

密码  

19179

查看

57

回复
主题:可以在SQL标签的输出部分支持REPLACE,并且支持IF判断输出,8月5号更新 [收藏主题] 本贴被认定为精华 转到:  
ajianuo 当前离线

151

主题

0

广播

0

粉丝
添加关注
级别:一年级

用户积分:863 分
登录次数:270 次
注册时间:2011/11/3
最后登录:2014/1/2
ajianuo 发表于:2011/12/20 10:31:40   | 显示全部帖子 查看该作者主题 楼主 
科汛智能建站系统

让SQL标签支持REPLACE!

声名:如果你不会,请不要随便改动,如果出现一些问题,请自已负责,谢谢!

使用REPLACE标签的方法

{$REPLACE(aa||bb,,bbb|cc,,ccc)}    查找bb替换bbb,和查找cc替换ccc   支持多替换,中间用|分开,aa是字符串,注意,这些字符串都不需要添加双引号

例:{$REPLACE(我们去上街||我们,,我|上街,,逛街)}

输出结果是:我去逛街


打开KS_Cls\Kesion.Label.SQLCls.asp


查找

                    ReplaceCondition=TempStr
        End Function

在下面添加


'字符替换 {$REPLACE(aa||bb,,bbb|cc,,ccc)}查找bb替换bbb,和查找cc替换ccc   支持多替换,中间用|分开
  Function ReplaceCondition1(byval str)
   Dim regEx, Matches, Match, TempStr
   Dim FieldParam,FieldParamArr,ReturnFieldValue,FieldParamArr1,FieldParamArr2,k,re1,re2,re3
   re1="||"
   re2="|"
   re3=",,"

're1,re2,re3可以换自己喜欢的符号,不容易出冲突的符号
                    on error resume next
     Set regEx = New RegExp
     regEx.Pattern = "\{\$REPLACE\([^{\$}]*\)\}"
     regEx.IgnoreCase = True
     regEx.Global = True
     Set Matches = regEx.Execute(str)
     TempStr=str
     For Each Match In Matches
       FieldParam    = Replace(Replace(Match.Value,"{$REPLACE(",""),")}","")
       FieldParamArr = Split(FieldParam,re1)
       if instr(FieldParamArr(1),re2)=0 and instr(FieldParamArr(1),re3)>0 then
        FieldParamArr2=Split(FieldParamArr(1),re3)
        ReturnFieldValue=Replace(FieldParamArr(0),FieldParamArr2(0),FieldParamArr2(1))
       elseif instr(FieldParamArr(1),re2)>0 then
      ReturnFieldValue=Replace(Replace(Match.Value,"{$REPLACE(",""),")}","")
        FieldParamArr1 =Split(FieldParamArr(1),re2)
        for k=0 to Ubound(FieldParamArr1)
      if k=0 then ReturnFieldValue=FieldParamArr(0)
        FieldParamArr2=Split(FieldParamArr1(k),re3)
        ReturnFieldValue=Replace(ReturnFieldValue,FieldParamArr2(0),FieldParamArr2(1))
        next
       end if
       if err then
        err.clear
       else
          TempStr=Replace(TempStr,"{$REPLACE(" &FieldParam &")}",ReturnFieldValue)
       end if
     Next
              ReplaceCondition1=TempStr
  End Function


‘=============分界线================

查找     CleanLabel=ReplaceCondition(Replace(Content,"$KS:Page$",vbcrlf))

替换


CleanLabel=ReplaceCondition1(Replace(Content,"$KS:Page$",vbcrlf))

CleanLabel=ReplaceCondition(CleanLabel)


查找                 For i=0 to objNode.ChildNodes.length-1
                    set objAtr=objNode.ChildNodes.item(i)

根据下面的红字体进行添加


Str=Replace(Replace(Replace(Replace(Replace(Replace(objAtr.Attributes.item(2).Text,"{$Field","{#Field"),"{$AutoID}","{#AutoID}"),"{$IF","{#IF"),"{$Param","{#Param"),"{$GetItemUrl}","{#GetItemUrl}"),"{$REPLACE","{#REPLACE")
'避免Field字段被替换掉,先转为#


Str=Rcls.ReplaceGeneralLabelContent(Str)



Str=Replace(Replace(Replace(Replace(Replace(Str,"{#Field","{$Field"),"{#AutoID}","{$AutoID}"),"{#IF","{$IF"),"{#Param","{$Param"),"{#REPLACE","{$REPLACE")



红色为添加部分

====================================================

8.5发现个问题如下

{$REPLACE(我们有$10块||10,,20)}

如果内部有$就无法运行了。所以我们要调整一下,

查找

regEx.Pattern = "\{\$REPLACE\([^{\$}]*\)\}"
替换

regEx.Pattern = "\{\$REPLACE\([^{}]*\)\}"

我想IF里面如果也有这个符号,应该也会 出问题,修改方法和这个一样~!

"\{\$REPLACE\([^{}]*\)\}"这段可能不是最正确的,但能力有限,先用着。官方能提点一下那就最好不过了。

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
<上一主题 | 下一主题 >
Powered By KesionCMS Version X1
厦门科汛软件有限公司 © 2006-2016 页面执行0.11401秒 powered by KesionCMS 9.0