账号通
    

账号  

密码  

2901

查看

7

回复
主题:科汛V9.5新增SQL标签可自设分隔符随意拆分数据(拆分项可随机输出或制定输出) [收藏主题] 转到:  
anflash 当前离线

209

主题

2

广播

36

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

用户积分:1084 分
登录次数:631 次
注册时间:2011/12/22
最后登录:2024/8/3
anflash 发表于:2014/6/19 16:24:19   | 显示全部帖子 查看该作者主题 楼主 
科汛智能建站系统
科汛很多数据以内容集的形式存放于是一个字段,比如图片系统里的图片地址。各个图片地址以|||隔开存放于PicUrls这个字段里,让建站者头疼的是怎样调用单个图片地址?由于笔者现需实现随机调取单个数据,因此从SQL标签下手开发出灵活运用的拆分数据标签。
标签:{$SPLITDATA(aaa[]b[]c)}
说明:aaa:字段;b:分隔符;c:输出数据所在位置(从0开始),当c=-1时随机输出拆分项
案例:{$SPLITDATA({$Field(PicUrls,Text,0,...,0,)}[],[]-1)}

创建该标签需修改同一asp三处:
/KS_Cls/Kesion.Label.SQLCls.asp

第一处:

Set objNode=Application(KS.SiteSN&"_sqllabellist").documentElement

For i=0 to objNode.ChildNodes.length-1

set objAtr=objNode.ChildNodes.item(i)

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

Str=Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Str,"{$CurrClassID}","{#CurrClassID}"),"{$CurrTopClassID}","{#CurrTopClassID}"),"{$CurrClassName}","{#CurrClassName}"),"{$CurrChannelID}","{#CurrChannelID}"),"{$CurrClassChildID}","{#CurrClassChildID}"),"{$CurrUserName}","{#CurrUserName}"),"{$CurrInfoID}","{#CurrInfoID}"),"{$CurrSpecialID}","{#CurrSpecialID}"),"{$GetUserName}","{#GetUserName}")

Str=Rcls.ReplaceGeneralLabelContent(Str)

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

objAtr.Attributes.item(2).Text=Str

Next

set Rcls=nothing


第二处:
                    ReplaceCondition1=TempStr
        End Function




'拆分数据输出其中一项    {$SPLITDATA(aaa[]b[]c)}     aaa:拆分数据 b:分隔符 c:提取哪项范围,当c=-1时随机输出拆分项


Function ReplaceCondition3(byval str)

      Dim regEx, Matches, Match, TempStr,Bool
      Dim FieldParam,FieldParamArr,ReturnFieldValue,I,FieldParamArr1,k
                    on error resume next
                    Set regEx = New RegExp
                    regEx.Pattern = "{\$SPLITDATA\([^{\$}]*}"
                    regEx.IgnoreCase = True
                    regEx.Global = True
                    Set Matches = regEx.Execute(str)
                    TempStr=str
                    For Each Match In Matches
                      FieldParam    = Replace(Replace(Match.Value,"{$SPLITDATA(",""),")}","")
                      FieldParamArr = Split(FieldParam,"[]")
                      if Ubound(FieldParamArr)=2 then


   I=int(FieldParamArr(2))


if FieldParamArr(0)<>"" and FieldParamArr(1)<>"" then



FieldParamArr1=Split(FieldParamArr(0),FieldParamArr(1))



k=Ubound(FieldParamArr1)



if I>k then



   ReturnFieldValue=FieldParamArr(0) '超出拆分范围输出自身



else



   if I<0 then



Randomize Timer



I=Int((k+1)*Rnd)



ReturnFieldValue=FieldParamArr1(I) '输出随机项


else



ReturnFieldValue=FieldParamArr1(I) '输出指定项


end if



end if





end if



end if




                      if err then
                       err.clear
                      else
                      TempStr=Replace(TempStr,"{$SPLITDATA(" &FieldParam &")}",ReturnFieldValue)
                      end if
                    Next
                    ReplaceCondition3=TempStr
        End Function



'取得分页标志

Function GetPageStr(SqlLabel)



第三处:

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

CleanLabel=ReplaceCondition1(CleanLabel)

CleanLabel=ReplaceCondition3(CleanLabel)

End Function

'替换循环部分内容


Function GetCirLabelContent(CirLabelContent,ByRef KS_RS_Obj,LoopTimes,ByVal NN)

备注:红色为添加部分
 
个人QQ:845977434
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
anflash 当前离线

209

主题

2

广播

36

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

用户积分:1084 分
登录次数:631 次
注册时间:2011/12/22
最后登录:2024/8/3
anflash 发表于:2014/6/19 16:36:55   | 显示全部帖子 查看该作者主题 沙发 
科汛智能建站系统

举例:

sql语句:

select top 1 FolderName,ClassDefineContent from KS_class

内容:

[loop=1]{$Field(foldername,Text,0,...,0,)}{$SPLITDATA({$Field(ClassDefineContent,Text,0,...,2,)}[],[]1)}[/loop]

输出以英文逗号隔开第二项

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