首页 > 常识 > 互联网 > 网站制作 > CMS

动易网站管理系统标签的修改

作者:啊涛  时间:2016-07-21
描述:如果我们现在有这样一个需求:我们不只要取出当前频道的相关文章,而是想取出所有文章频道的相关文章,那我们应该如何修改?
《生活宝典shenghuobaodian.com》讯  在系统的时候过程中,我们经常会遇到这种问题,系统标签的功能跟我们实际的需求大致符合,可是我们有些需求系统标签又无法完全实现,用自定义标签重新来构造所有功能也不大现实,这个时候,我们就可以考虑通过修改文件的方式来将系统标签的功能加以扩展。

我们来看一下一个实际的例子

标签名:{$CorrelativeArticle(ArticleNum, TitleLen, OrderType, OpenType, Cols)}
作 用:显示相关文章(可不带参数使用)
参 数:ArticleNum  ----最多显示多少篇文章
TitleLen   ----标题最多字符数,一个汉字=两个英文字符
OrderType ---- 
排序方式,1--按文章ID降序,2--按文章ID升序,3--按更新时间降序,4--按更新时间升序,5--按点击数降序,6--按点击数升序,7--按评论数降序,8--按评论数升序
OpenType ---- 文章打开方式,0为在原窗口打开,1为在新窗口打开
Cols ---- 每行的列数。超过此列数就换行
      
这个是我们系统内置的一个标签,作用是在文章的内容页中,根据关键字来取出当前频道的相关文章。
如果我们现在有这样一个需求:我们不只要取出当前频道的相关文章,而是想取出所有文章频道的相关文章,那我们应该如何修改?
     
首先我们来分析一下,我们有以下两个解决方案

1、直接修改这个标签相关函数的内容,扩大这个标签SQL语句读取文章的范围,从原来的读取当前频道的相关文章改为读取所有文章频道的相关文章;

2、 我们给标签加多一个参数,比如ChannelID,用不同数值来控制不同的情况,比如0代表所有文章频道,-1代表当前频道,输入具体数字代表指定频道
      
我们来对比一下两种解决方案的优缺点。

解决方案1

是最快可以解决问题的方法,由于我们并没有改变参数的调用情况和参数个数,模板里面相应标签也不用做修改,不过他的缺点是少了控制性跟灵活性,修改之后,我们如果想改会原来读取当前频道的文章,那么我们又必须修改源代码,而且如果我们有多个频道,我们也没法控制哪个频道实现调用所有文章频道的相关文章,哪个频道还是读取当前频道的相关文章。

解决方案2 

可以克服上面方案1的缺点,不过方案2需要考虑的问题也比较多,修改起来比较复杂,我们必须修改这个标签读取参数的代码,标签对应函数对新增参数的处理流程,而且这个时候会产生一个新的问题,我们模板中如果有很多地方调用了这个标签,那么需要一个个去修改标签,加入新的参数,要不然标签就不能正常解析。

上面解决方案2遇到的问题,其实就是一个兼容性的问题,我们新增加了一个参数,那么我们怎么兼容之前的标签,让他们都能够正常的解析?一般来说,我们有两种处理方法:
        
1、不同参数的标签调用同一个函数,程序先判断参数的个数,如果参数个数不足,用默认值补上,比如我们{$CorrelativeArticle(参数列表)} 

这个标签,默认是有五个参数,我们新加了一个参数,那么模板中如果再出现五个参数的情况,就给他一个默认值,我们可以默认让他相关当前频道的文章,也可以默认让他相关所有文章频道的文章。
        
2、不同参数的标签调用不同的函数,比如我们原来有五个参数,调用的是默认的函数,我们现在新增了一个参数,那么我们再另外构造一个函数来处理六个参数这种情况。
        
下面我们还是用实际例子来分析一下前面说到的问题。

首先我们找到{$CorrelativeArticle(参数列表)}这个标签参数的处理代码,大概是在Include文件夹里面的PowerEasy.Article.asp文件3162行
        Dim arrTemp
        Dim strCorrelativeArticle
        regEx.Pattern = "{$CorrelativeArticle((.*?))}"
        Set Matches = regEx.Execute(strHtml)
        For Each Match In Matches
            arrTemp = Split(Match.SubMatches(0), ",")
            Select Case UBound(arrTemp)
            Case 1
                strCorrelativeArticle = GetCorrelative(arrTemp(0), arrTemp(1), 
    1, 0, 1)
            Case 4
                strCorrelativeArticle = GetCorrelative(arrTemp(0), arrTemp(1), 
    arrTemp(2), arrTemp(3), arrTemp(4))
            Case Else
                strCorrelativeArticle = 
    "函数式标签:{$CorrelativeArticle(参数列表)}的参数个数不对。请检查模板中的此标签。"
            End Select
            strHtml = Replace(strHtml, Match.Value, strCorrelativeArticle)
        Next
      这里我们可以看到实际上已经定义了参数是2个,参数是5个时候的处理情况,通过代码我们可以看到处理这个标签的参数是传递给GetCorrelative()这个函数的,下面我们再看一下这个函数是如何定义的,我们找到还是在这个文件PowerEasy.Article.asp的1386行左右定义了这个这个函数:Private 
    Function GetCorrelative(ArticleNum, TitleLen, OrderType, OpenType, Cols)
      我们可以看到这个函数的SQL语句是这样定义的
        sqlCorrelative = sqlCorrelative & " 
    A.ArticleID,A.Title,A.Author,A.UpdateTime,A.Hits,A.InfoPurview,A.InfoPoint,C.ParentDir,C.ClassDir,C.ClassPurview
    from PE_Article A left join PE_Class C on A.ClassID=C.ClassID where 
    A.ChannelID=" & ChannelID & " and A.Deleted=" & PE_False & " and A.Status=3 
    and A.ReceiveType=0"
      也就是他取值的范围已经限制在A.ChannelID=" & ChannelID & 
    "这个范围,ChannelID这个标签就是当前栏目的ID,如果我们按照方案1的修改方法,那么很简单,我们去掉这个限制就可以了,我们可以把SQL语句修改成:
        sqlCorrelative = sqlCorrelative & " 
    A.ArticleID,A.Title,A.Author,A.UpdateTime,A.Hits,A.InfoPurview,A.InfoPoint,C.ParentDir,C.ClassDir,C.ClassPurview
    from PE_Article A left join PE_Class C on A.ClassID=C.ClassID where 
    A.Deleted=" & PE_False & " and A.Status=3 and A.ReceiveType=0"
      然后我们保存,再刷新一下页面,可以看到内容页相关文章的标签调用的已经是所有文章频道的相关文章了。
      下面我们按照方案2的方法来修改,首先我们必须修改这个标签参数的处理代码
      首先我们处理无参数的情况,也就是标签{$CorrelativeArticle}
      在3166行左右找到下面代码:
        If InStr(strHtml, "{$CorrelativeArticle}") > 0 Then strHtml = 
    Replace(strHtml, "{$CorrelativeArticle}", GetCorrelative(10, 26, 1, 0, 1))
      增加一个默认参数,改为
        If InStr(strHtml, "{$CorrelativeArticle}") > 0 Then strHtml = 
    Replace(strHtml, "{$CorrelativeArticle}", GetCorrelative(10, 26, 1, 0, 1, 
    -1))
     
      其次我们看一下有参数的情况,即{$CorrelativeArticle(参数列表)}
        Dim arrTemp
        Dim strCorrelativeArticle
        regEx.Pattern = "{$CorrelativeArticle((.*?))}"
        Set Matches = regEx.Execute(strHtml)
        For Each Match In Matches
            arrTemp = Split(Match.SubMatches(0), ",")
            Select Case UBound(arrTemp)
            Case 1
                strCorrelativeArticle = GetCorrelative(arrTemp(0), arrTemp(1), 
    1, 0, 1, -1)
            Case 4
                strCorrelativeArticle = GetCorrelative(arrTemp(0), arrTemp(1), 
    arrTemp(2), arrTemp(3), arrTemp(4), -1)
    Case 5
                strCorrelativeArticle = GetCorrelative(arrTemp(0), arrTemp(1), 
    arrTemp(2), arrTemp(3), arrTemp(4), arrTemp(5))
            Case Else
                strCorrelativeArticle = 
    "函数式标签:{$CorrelativeArticle(参数列表)}的参数个数不对。请检查模板中的此标签。"
            End Select
            strHtml = Replace(strHtml, Match.Value, strCorrelativeArticle)
        Next
      这里我们增加了六个参数时的处理情况,如果是两个参数,或者是五个参数的情况,我们都将他一些默认值补足六个参数,最后一个参数我们默认设置是-1,这里我们可以预定义-1是取出当前频道的相关文章,也就是原来的标签,保留原有的功能。
      我们将原来函数改成
    Private Function GetCorrelative(ArticleNum, TitleLen, OrderType, OpenType, 
    Cols,theChannelID)
        Dim rsCorrelative, sqlCorrelative, strCorrelative, iCols, iTemp
        Dim strKey, arrKey, i, MaxNum
        ……省略部分代码
        sqlCorrelative = sqlCorrelative & " 
    A.ArticleID,A.Title,A.Author,A.UpdateTime,A.Hits,A.InfoPurview,A.InfoPoint,C.ParentDir,C.ClassDir,C.ClassPurview
    from PE_Article A left join PE_Class C on A.ClassID=C.ClassID where "
        IF PE_Clng(theChannelID) = -1 then 
            sqlCorrelative = sqlCorrelative & " A.ChannelID=" & ChannelID
        Else
            sqlCorrelative = sqlCorrelative & " 1=1"         
        End IF
        sqlCorrelative = sqlCorrelative & " and A.Deleted=" & PE_False & " and 
    A.Status=3 and A.ReceiveType=0"
        sqlCorrelative = sqlCorrelative & " and " & strKey & " and 
    A.ArticleID<>" & ArticleID & " Order by "
        ……省略部分代码
    End Function
      这样对这个标签的修改就基本上完成了。
      当然我们还可以处理更复杂的情况,比如传入多个频道ID,用|分隔,加入栏目的限制等,这里讲解的主要是标签修改的流程,进一步的处理用户可以自己尝试一下。

从手机浏览器访问《生活宝典》

站内搜索
  • 帝国网站管理系统系统设置的重新赋值
  • 常用的几种CMS网站管理系统参数设置方法
  • 帝国网站管理系统本地安装数据库配置
  • 帝国CMS网站管理系统多终端访问功能设置步骤
  • 帝国网站管理系统模板组功能介绍
  • 精通《帝国网站管理系统》的法宝
  • 帝国网站管理系统安全设置要点
  • 《帝国网站管理系统》版本升级安全操作方法
  • 《帝国网站管理系统》本地安装数据库配置
  • 《帝国网站管理系统》常见问题解答(三)
  • 微商帮
    世界网站大全
    中国科研团队:大象的长鼻子是如何越变越长了
    中国科研团队:大象的长
    自己是否能够像自己想的那样做成一件事,身旁人的判断会比自己准确
    自己是否能够像自己想
    火宫殿:吃喝玩乐看,烧香拜神佛,红火的庙会经济
    火宫殿:吃喝玩乐看,烧香
    眼见为实也不为实,更须谨慎看到的并非全貌
    眼见为实也不为实,更须