账号通
    

账号  

密码  

20421

查看

30

回复
主题:让 Loop 中支持IF标签 [收藏主题] 本贴被认定为精华 转到:  
foxhunter 当前离线

3

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:106 分
登录次数:3 次
注册时间:2011/4/26
最后登录:2011/4/28
foxhunter 发表于:2011/4/26 22:43:04   | 显示全部帖子 查看该作者主题 楼主 
做在线知识付费 选科汛云开店

让自定义的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分析



  1. '需要修改的
  2. Sub Scan(ByVal sTemplate)
  3.    Dim iPosLast, iPosCur   
  4.    iPosLast    = 1
  5.    While True
  6.     iPosCur    = InStr(iPosLast, sTemplate, "{@")
  7.     If iPosCur>0 Then
  8.      Echo    Mid(sTemplate, iPosLast, iPosCur-iPosLast)
  9.      iPosLast  = Parse(sTemplate, iPosCur+2)     
  10.     Else
  11.      Echo    Mid(sTemplate, iPosLast)
  12.                      Templates=ParseIF(Templates)        '此处为修改的增加项目           
  13.      Exit Sub  
  14.     End If
  15.      Wend
  16.   End Sub
  17.    

  18.   '增加的代码

  19.     Function DoIf(byval condition,byval yes,byval no)
  20.             if(Eval(condition)) then
  21.                 DoIf=yes
  22.             else
  23.                 DoIf=no
  24.             end if
  25.         end function
  26.         
  27.         '增加的代码  使用标签格式 {$IF 1=1 } {True} {False} {/$IF}  按照以下的正则 是不允许在条件分支中出现大括号内容的
  28.         '使用举例如    {$IF {@autoid} mod 2=0 } {</tr><tr>} {{$IF {@autoid}=1 }{<font color="Red">第一名</font>}{}{/$IF}} {/$IF}  这个是说明 使用中这个例子中的第二级IF应该是用不到吧呵呵
  29.         '条件中的判断格式: 原来asp该怎么写就怎么写
  30.    Function ParseIF(sTemplate)
  31.             dim condition,yes,no           
  32.             regEx.Pattern = "\{\$IF([^\}]*)\}[^\{]*\{([^\}]*)\}[^\{]*\{([^\}]*)\}[^\{]*{/\$IF\}"
  33.             Set Matches = regEx.Execute(sTemplate)
  34.             On Error Resume Next
  35.             '不断的检查自身 用来替换嵌套的IF
  36.             while(Matches.Count<>0)
  37.                     set Match=Matches(0)
  38.                     condition=Match.SubMatches.Item(0)
  39.                     yes=Match.SubMatches.Item(1)
  40.                     no=Match.SubMatches.Item(2)                 
  41.                     sTemplate=replace(sTemplate,Match.Value,DoIf(condition,yes,no))                  
  42.                     set Matches=regEx.Execute(sTemplate)                  
  43.             wend           
  44.             set Matches=nothing
  45.             ParseIF=sTemplate
  46.         end Function



以上代码属于个人研究,如有不足和疏漏 大家一起来修改吧

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