让自定义的Loop 循环中支持 IF 条件判断(支持IF 嵌套 测试了 一个IF下 两个同层级的IF情况没发现什么问题,貌视嵌套用不到什么 呵呵)。
当然,本人觉得如果是按照div+css的方式来布局应该对这个IF不是太依赖,很多的事情可以变通来处理。
但是如果某些特殊原因 例如偷懒想用table 快捷了事的话那么IF还真有他的用处。
在百度搜索了一下一直找不到解决办法,只好自己临时改下代码
暂时对于处理 loop 中if判断(主要配合mod进行</tr><tr>)没有出现什么问题。
由于本人是第一次使用本系统,只是在需要中修改的,因此代码的完备性和特殊处理上可能会有疏漏,如果大家发现了可以自行修改
解决办法:修改完善 KS_Cls\Kesion.Label.FunctionCls.asp
原理:我们需要在每一条Loop单元处理完毕后(系统级) 再来接管进行IF分析。之所以这个时候接管是因为我们的IF中可能会用到系统标签的值,所以需要让系统先分析并赋值后我们再处理
注意:IF代码支持嵌套,但会从最里层级开始 进行if分析
-
- '需要修改的
- Sub Scan(ByVal sTemplate)
- Dim iPosLast, iPosCur
- iPosLast = 1
- While True
- iPosCur = InStr(iPosLast, sTemplate, "{@")
- If iPosCur>0 Then
- Echo Mid(sTemplate, iPosLast, iPosCur-iPosLast)
- iPosLast = Parse(sTemplate, iPosCur+2)
- Else
- Echo Mid(sTemplate, iPosLast)
- Templates=ParseIF(Templates) '此处为修改的增加项目
- Exit Sub
- End If
- Wend
- End Sub
-
'增加的代码
- Function DoIf(byval condition,byval yes,byval no)
- if(Eval(condition)) then
- DoIf=yes
- else
- DoIf=no
- end if
- end function
-
- '增加的代码 使用标签格式 {$IF 1=1 } {True} {False} {/$IF} 按照以下的正则 是不允许在条件分支中出现大括号内容的
- '使用举例如 {$IF {@autoid} mod 2=0 } {</tr><tr>} {{$IF {@autoid}=1 }{<font color="Red">第一名</font>}{}{/$IF}} {/$IF} 这个是说明 使用中这个例子中的第二级IF应该是用不到吧呵呵
- '条件中的判断格式: 原来asp该怎么写就怎么写
- Function ParseIF(sTemplate)
- dim condition,yes,no
- regEx.Pattern = "\{\$IF([^\}]*)\}[^\{]*\{([^\}]*)\}[^\{]*\{([^\}]*)\}[^\{]*{/\$IF\}"
- Set Matches = regEx.Execute(sTemplate)
- On Error Resume Next
- '不断的检查自身 用来替换嵌套的IF
- while(Matches.Count<>0)
- set Match=Matches(0)
- condition=Match.SubMatches.Item(0)
- yes=Match.SubMatches.Item(1)
- no=Match.SubMatches.Item(2)
- sTemplate=replace(sTemplate,Match.Value,DoIf(condition,yes,no))
- set Matches=regEx.Execute(sTemplate)
- wend
- set Matches=nothing
- ParseIF=sTemplate
- end Function
以上代码属于个人研究,如有不足和疏漏 大家一起来修改吧