账号通
    

账号  

密码  

10297

查看

18

回复
主题:关于首页调用单页栏目内容的问题 |已解决 [收藏主题] 转到:  
rat9 当前离线

145

主题

5

广播

2

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

用户积分:263 分
登录次数:30 次
注册时间:2009/9/30
最后登录:2016/4/6
rat9 发表于:2013/3/13 23:39:39   | 显示全部帖子 查看该作者主题 楼主 
科汛在线网校系统

----------------第三次发帖---------------------


使用此方法解决了该问题,不过有点小题大做 呵呵

http://bbs.kesion.com/forumthread-1042291-1.html

按照该贴方法修改后,

sql标签名称为 单页内容

语句部分

select id,foldername,ClassBasicInfo from ks_class where id= '{$Param(0)}'

或者偷懒直接用*号代表所有字段

select * from ks_class where id='{$Param(0)}'

循环部分要用这个

[loop=1]
{$INTERCEPTION({$Field(ClassBasicInfo,Text,0,...,0,)}[]1[]0)}
[/loop]


第一个参数用1,第二个参数 是字数,不限制用0


主页调用:

{SQL_单页内容(20137083961146)}

20137083961146  为单页栏目ID

或者改进下:用参数 {$Param(1)}代替限制的字数。循环部分要用这个

[loop=1]
{$INTERCEPTION({$Field(ClassBasicInfo,Text,0,...,0,)}[]1[]{$Param(1)})}
[/loop]

{SQL_单页内容(20137083961146,300)}

300就是限制的字数,0不限制



----------------第二次发帖---------------------


百度了这个方法,尝试后还是一样的问题。


http://blog.163.com/mayoulu@126/blog/static/3767190920093129450683/

新增SQL标签"{$SQLReplace}"用以取代asp的函数split


需求说明

有时我们需要通过SQL标签调用栏目的介绍(classbasicinfo)及自定义内容(classdefinecontent),他们的结构是用这种方式存储的"a|||b|||c",这个时间,如果我们需要其中的一项,就需要split函数,而科汛没有提供,为此特意二次开发

代码修改:Kesion.Label.SQLCls.asp


示例:{$SQLReplace({$Field(ClassDefineContent,Text,0,0,2,)},||||,0)}


参说说明:参数1是为要拆分的内容,参数2是拆分的分割符,参数3是取第几位,注意是以0开始的


找到大约350行,增加以下红色部分


End If
KS_RS_Obj.MoveNext
Next
GetCirLabelContent=MySplitField(GetCirLabelContent)
End Function


Function MySplitField(lpFieldValue)
Dim regEx, Matches, Match
Dim FieldParam,FieldParamArr,mytempValue,mytempNum,mytarget,templpFieldValue
Set regEx = New RegExp
regEx.Pattern = "{\$SQLReplace\([^{\$}]*}"
regEx.IgnoreCase = True
regEx.Global = True
Set Matches = regEx.Execute(lpFieldValue)
For Each Match In Matches
FieldParam = Replace(Replace(Match.Value,"{$SQLReplace(",""),")}","")
FieldParamArr = Split(FieldParam,",")
mytempValue=split(replace(Replace(KS.LoseHtml(KS.HtmlCode(FieldParamArr(0)))," ","")," ",""),trim(FieldParamArr(1)))
if ubound(mytempValue)>=cint(FieldParamArr(2)) then lpFieldValue=Replace(lpFieldValue,Match.Value,mytempValue(FieldParamArr(2)))
Next
MySplitField=lpFieldValue
End Function


调用说明:

SQL语句:select top {$Param(0)} classid,id,foldername,ClassDefineContent from ks_class where tn='{$Param(1)}' and topflag=1 order by folderorder asc


循环部分:<dl>[loop={$Param(0)}]<dt>{$SQLReplace({$Field(ClassDefineContent,Text,0,0,2,)},||||,0)}【<a href="{$Field(id,GetInfoUrl,100,1)}">{$Field(foldername,Text,0,...,0,)}</a>】</dt><dd>{SQL_疾病导航内部(10,{$Field(id,GetInfoUrl,100,2)})}</dd>[/loop]</dl>





-----------------第一次发帖---------------------------



一直都遇到这样的问题,就是如何在主页或频道页调用单页栏目的内容。

我们知道单页栏目的内容只能使用标签{$GetClassIntro}在模板里调用,但是这个标签在首页和频道也是不起作用的。

很多人给出的方法就是直接输入文字,或者另外建一个标签输入文字。

也有人使用:  单页面-自设内容 来实现

http://bbs.kesion.com/forumthread-169344.html

但是觉得还是太过复杂,也不方便管理。


更多的是直接新建一篇文章,然后用 {=getfieldvalue(模型ID,文档ID,字段名称)}标签来调用 推荐这个方法。

http://bbs.kesion.com/forumthread-787716.html


这个标签只能调用文章



那么我如果就是要使用单页栏目的功能,并实现首页调用,难道就真的做不到吗?于是我就再想 单页栏目的内容究竟是在哪个字段里面,于是我一个个字段试了一下,发现是classbasicinfo 这个字段,打开数据库看ks_class的表也是一样。但是 这个字段表示的是“栏目信息配置集合”,就是这样的一个字段,有很多内容:

 ClassBasicInfo
 ||||视频,视频分享,视频搜索,视频播放||||视频,视频分享,视频搜索,视频播放||||视频服务平台,提供视频播放,视频发布,视频搜索,视频分享||||0%ks%0,0,0,0%ks%0%ks%%ks%


那么怎么提取出栏目内容呢?


我百度一下找到了:

http://pewper.blog.163.com/blog/static/29708608200911314464239/




假设标签名为    单页内容

---------------------------

栏目介绍语句:

select top 100 id,foldername,mid(classbasicinfo,instr(classbasicinfo,"||||")+4) as s,mid(s,1,instr(s,"||||")-1) as 栏目介绍 from ks_class where tj=1 order by folderorder
---------------------------
稍微修改一下即可:

select id,foldername,mid(classbasicinfo,instr(classbasicinfo,"||||")+4) as s,mid(s,1,instr(s,"||||")-1) as 栏目介绍 from ks_class where id='20137083961146'
说明,这个红色的就是 单页栏目的ID

---------------------------
循环部分语句就要相应修改:

[loop=1]
{$Field(栏目介绍,Text,200,...,0,)}
[/loop]
说明,这个200 就是显示的字数,如果要不限制就写0,  不过这个字数好像不是很准确,自己多试几次吧。

我测试的结果:实际汉字字数=输入数字/2-3    输入20只显示了7个汉字。

---------------------------

主页或频道也调用就是

{SQL_单页内容()}

当然如果你想这个标签更灵活通用,可以用参数来代替 单页栏目的ID


select id,foldername,mid(classbasicinfo,instr(classbasicinfo,"||||")+4) as s,mid(s,1,instr(s,"||||")-1) as 栏目介绍 from ks_class where id= '{$Param(0)}'


调用的时候就用

{SQL_单页内容(20137083961146)}


欢迎访问我的小站:大学风论坛 www.zgdxs.net

----------------更灵活的使用方法 但是只适合文字很短的介绍调用-----------------------------------

栏目简短介绍通用sql标签,适合用于公司简介等单页形式
236个字符(含空格)则内容会阶段,模板剩下的代码也不正常。

使用方法:

{SQL_栏目通用简短介绍(栏目ID号,简短字数)}

示例:{SQL_栏目通用简短介绍(2000012569,210)} 调用ID为2000012569的栏目介绍210字

{SQL_栏目通用简短介绍(2000012569,0)} 调用ID为2000012569的栏目介绍全部内容

参数说明:

第一个参数是栏目所在的ID号

第二个参数是调用的字数,如果调用全部就为0

sql语句:

select top 1 id,FolderName,mid(classbasicinfo,instr(classbasicinfo,"||||")+4) as s,mid(s,1,instr(s,"||||")-1) as 栏目介绍,mid(classbasicinfo,1,instr(classbasicinfo,"||||")-1) as 栏目图片 from ks_class where classid='{$Param(0)}'

循环体:

[loop=1]
{$Field(栏目介绍,Text,{$Param(1)},...,0,)}
[/loop]


如果文字少可能没有什么问题,但是如果文字多就失败了。好像是限制字数了。

问题见:

http://bbs.kesion.com/forumthread-146291-1.html


尚无解,折腾半天就是鸡肋啊!

-------

  

如有不当之处,请指正!

谢谢!

点评 2

乱弹琴:4.0     说得很好:4.0     
veryp 乱弹琴:4 说得很好:4
这些方式调出来的内容都不能过滤内容中的HTML代码吧, 威望+1 发表于 2013/3/19 12:04:00 
 
大学风论坛http://www.zgdxs.net 校园论坛,校园门户
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
rat9 当前离线

145

主题

5

广播

2

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

用户积分:263 分
登录次数:30 次
注册时间:2009/9/30
最后登录:2016/4/6
rat9 发表于:2013/3/14 17:07:33   | 显示全部帖子 查看该作者主题 沙发 
科汛在线网校系统

楼上能不能把你的JS 分享一下啊,我不会写JS 呵呵

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
rat9 当前离线

145

主题

5

广播

2

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

用户积分:263 分
登录次数:30 次
注册时间:2009/9/30
最后登录:2016/4/6
rat9 发表于:2013/3/20 12:29:48   | 显示全部帖子 查看该作者主题 藤椅 
科汛在线考试系统(NET)
以下是引用 kswtzj在2013-3-19 23:29:00的发言:

||||松岛枫阿斯顿发送到发送到的||||||||||||0%ks%0,left,300,300%ks%1%ks%%ks%http://www.kesion.com

红字是读取的的, 不知道为什么  

前后会出现几个乱码

黑字是系统加上的



正因为这个栏目信息有很多,一个字段包含了很多内容,所以需要用自定义函数来把我们需要的部分提取出来的。

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