在系统的时候过程中,我们经常会遇到这种问题,系统标签的功能跟我们实际的需求大致符合,可是我们有些需求系统标签又无法完全实现,用自定义标签重新来构造所有功能也不大现实,这个时候,我们就可以考虑通过修改文件的方式来将系统标签的功能加以扩展。
我们来看一下一个实际的例子
标签名:{$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,用|分隔,加入栏目的限制等,这里讲解的主要是标签修改的流程,进一步的处理用户可以自己尝试一下。
分享到:
相关推荐
经过现场调试和实际使用,证明了该标签打印系统具有很高的稳定性和良好的性价比,它的设计使系统便于修改参数和程序,适合于各类标签打印需求。同时,系统的小型PLC组网方式不仅减少了成本,也保证了系统的灵活性和...
总的来说,BYLABEL标签打印系统V3.68是一款强大的标签制作工具,通过其直观的界面和强大的功能,可以帮助用户轻松完成标签设计和打印工作,提升业务流程的效率。无论是个人还是企业,都能从中受益。
OA系统源码的开放性意味着开发者或团队可以直接研究、修改和扩展系统功能,尤其是审批流程部分,以适应不同的工作环境和管理需求。 【标签】:“审批流程”、“OA”、“办公自动化”是这套源码的关键标签。审批流程...
在学生成绩系统中,流程可能涉及以下步骤:用户登录、选择班级、录入/修改成绩、查询特定学生或全班成绩、统计平均分、最高分和最低分等。 在压缩包中的"流程图02.doc"文件中,可能详细展示了上述步骤的流程图,而...
系统在工作流程上包括以下几个步骤:首先,通过定位光电传感器检测瓶子的位置,当瓶子经过时传感器由高电平变为低电平,并通过旋转编码器的脉冲数记录位置信息;然后,通过检测光电传感器判断标签是否贴合标准,合格...
- 每个流程的属性标签会明确指出是否需要总部对应管理部门参与审核及备档,以及是否为公共流程。 - 审批环节支持退回给申请人,但不可退回到其他审核节点。备档环节只能向下转交,不允许向上退回。 - 各个流程...
这大大提高了系统的灵活性,使得标签打印成为业务流程中的一个组成部分,而不仅仅是一个独立的操作。 此外,"LREditor"可能还提供了高级功能,比如预览功能,允许用户在打印前查看标签的最终效果;批量处理功能,...
1. 总体布局:RFID流程图需要在实施库房配置简单的基本服务器,运行中间件和数据库,异步将更新传给Amicos进行写入修改。同时,需要在实施库房配置无线局域网,手持机可离线读取电子标签数据,也可通过WLAN与当地...
PHPCMS系统为了简化模板的制作流程及提升用户体验,引入了中文标签的概念。这种标签模式相较于早期版本中的长标签调用方式更加直观易懂,降低了非专业技术人员制作模板的难度。 **特点与优势:** - **简化标签调用...
整个仓库管理系统程序流程图会详细展示上述各系统间的交互逻辑,以及从接收到货物到完成出库的整个流程,包括可能的异常处理和错误纠正步骤。通过这样的流程图,用户和开发者能更好地理解系统的运作方式,从而进行...
Struts框架的优势在于简化了系统架构,通过配置文件(struts-config.xml)清晰地定义了Action与JSP页面的映射关系,使得开发者能快速理解和修改系统流程。此外,它将视图和逻辑分离,使得JSP页面专注于展示,而...
- **智能化管理**:通过集成化系统设计,支持无人值守操作模式,实现从服务器获取商品信息到电子标签更新的自动化流程,显著提升工作效率并减少人为错误。 #### 三、idiSolution ESL的应用场景 - **食品零售**:...
模板标签系统的整体工作流程如下: 1. **初始化**: 当控制器将控制权传递给`TagActionDispatcher`时,会进行初始化。这个阶段会重新获取`$form`、`$errors`和`$data`等对象,确保它们在资源模板中可见。同时,会...
标题 "activiti5.22 流程设计器绘画的流程图条件线上的字不显示" 指出的问题是,在使用Activiti 5.22版本的流程设计器绘制流程图时,条件线上(通常用于表示流程分支依据的条件)的文字没有正确显示。这可能对流程图...
标签“Windows XP 系统 密码修改”明确了这个工具的主要功能,它专注于Windows XP系统,并且其核心作用在于修改密码。Windows XP的密码修改通常涉及到SAM(Security Account Manager)数据库,这是Windows操作系统...
在使用"Mp3标签修改器3.61"的过程中,用户会发现其界面简洁直观,操作流程清晰。软件提供的批量处理功能,使得大量文件的标签调整变得轻而易举。配合其智能搜索和匹配功能,即使面对庞大的音乐库,也能迅速完成整理...
- 在流程属性标签中会注明是否需要总部对应管理部门参与审核和备档,以及是否为公共流程,供所有员工使用。 3. **审批规则**: - 审批环节可以退回给申请人,但不能退回到其他审批节点。 - 备档环节只能向下传递...
### 思科认证跟踪系统参考流程详解 #### 一、引言 随着信息技术的发展与普及,思科认证作为全球IT领域的重要认证之一,受到了广泛的关注与认可。对于想要获得思科认证的专业人士来说,了解并熟悉思科认证跟踪系统...
在描述中提到了一个“教程视频”,意味着有一个教学资源,可能是通过SWF(Shockwave Flash)格式的文件来展示如何操作这个系统的请假流程。SWF是一种常见的多媒体文件格式,常用于网络上的动画和交互式内容。用户...