NetCms修改之三:相关新闻的Bug及其修正
来源:互联网 发布:32单片机芯片尺寸 编辑:程序博客网 时间:2024/05/29 11:12
NetCMS的相关新闻显示是根据新闻的Tag来查找所有具有相同的Tag的新闻,然后将其显示的。如,某条新闻的Tag是“工资|奖金”,那么会用下列SQL语句来查找具有相同Tag的新闻:
select top 5 * from ahjdcw.NT_News
Where [isRecyle]=0 And [isLock]=0 And [SiteID]='0'
And ([Tags] Like '%工资%' or NewsTitle Like '%工资%' or [Tags] Like '%奖金%' or NewsTitle Like '%奖金%' or 1=2)
Order By [CreatTime] Desc,id Desc
新闻内容页是通过Content.aspx页面来实现的。实现原理是,逐步查找模板中的所有标签,然后用相应的内容去替换。如显示新闻内容时,在LabelMass类中,使用正则表达式,用ParseContent()方法查找[NT:unLoop,NT:SiteID=0,NT:LabelType=ReadNews]...[/NT:unLoop]标签,再用Parse()方法替换{Title}{Content}等内容字段。
关键在于,相关新闻的标签
[NT:Loop,NT:SiteID=0,NT:LabelType=CorrNews,NT:Number=5,NT:Desc=desc,NT:DescType=date,NT:isDiv=true,NT:TitleNumer=50]
<li><a href="{#URL}">{#uTitle}</a></li>
[/NT:Loop]
是嵌套在【ReadNews 标签】中的。LabelMass类Parse()方法调用Analyse_CorrNews()方法,Analyse_CorrNews()方法再调用Analyse_List()方法,Analyse_List()方法调用Analyse_ReadNews()去解析标签字段内容去替换{Title}内容字段时,会把相关新闻的{Title}字段也一并替换掉了,造成下一步去解析CorrNews标签时,已经没有{Title}字段可以替换了,因此造成同一个新闻标题(实际上就是本条新闻标题)会重复显示多次。如下所示:
·工作人员文明礼貌用语
·工作人员文明礼貌用语
·工作人员文明礼貌用语
·工作人员文明礼貌用语
·工作人员文明礼貌用语
解决办法是:解析ReadNews标签时,先暂时将CorrNews标签内容去掉。解析完成后,再添加回去,以不影响下一步解析。
修改NetCMS.Publish项目内的LabelMass_Method4.cs文件中的Analyse_ReadNews方法。
1、第一行增加以下代码,用以保存要去掉的CorrNews标签。
string CorrNews = null;
2、在以下代码后:
if (NewsTF == 1)
{
str_Style = this.Mass_Inserted;
增加以下代码:
// 如果是读取新闻内容标签,去掉相关新闻标签
if (this.Param_LabelType == EnumLabelType.ReadNews)
{
string pattern = @"/[NT:Loop,[^/]]+/][/s/S]*?/[/NT:Loop/]";
Regex reg = new Regex(pattern, RegexOptions.Compiled);
Match m = reg.Match(str_Style);
if (m.Success)
{
CorrNews = m.Value;
int pos = str_Style.IndexOf(CorrNews);
int len = CorrNews.Length;
str_Style = str_Style.Substring(0, pos - 1) + "[NT:Loop,NT:SiteID=0,NT:LabelType=CorrNews]" + str_Style.Substring(pos + len);
}
}
作用是取出CorrNews标签部分,用"[NT:Loop,NT:SiteID=0,NT:LabelType=CorrNews]" 取代,便于后面将CorrNews标签再加回去。
3、在以下代码之前(快到Analyse_ReadNews方法结束了),加入以下代码:
// 将相关新闻标签再加回去
if (this.Param_LabelType == EnumLabelType.ReadNews)
{
if (CorrNews != null || CorrNews.Trim() != "")
{
str_Style = str_Style.Replace("[NT:Loop,NT:SiteID=0,NT:LabelType=CorrNews]", CorrNews);
}
}
重新生成NetCMS.Publish和NetCMS.Web项目,将NetCMS.Web项目Bin文件夹下生成的NetCMS.Publish.dll文件复制到网站的bin文件夹下覆盖同名文件,就OK了。
- NetCms修改之三:相关新闻的Bug及其修正
- NetCMS修改之二:单击新闻附件,直接打开文件
- NetCms修改之一:增加上传文件的类型
- 修正bug的方法
- CCEditBox的bug修正
- Ogre Lod的一个bug及其修改
- 手工修改动网新闻.net3.0的Bug
- 手工修改动网新闻.net3.0的Bug
- 手工修改动网新闻.net3.0的Bug
- Extjs 支持图片上传的Html编辑器(StarHtmleditor)及其bug修正
- 【转】SiftGPU不自动释放GL context的bug及其修正方法
- 修正XPMenu的两个Bug
- BugFree 的一个 bug 修正
- Subversion分支的Bug修正
- NetCMS修改之四:扩展轮换幻灯片属性(NorFilt),具有导读显示
- Menu键控制PopupMenu的相关bug及其避免方法
- 《新闻》之笔记三
- iOS之修改项目BUG之旅--(三)
- oracle的update问题
- Oracle数据库字符集问题总结
- oracle数据库中关于null排序的问题
- Oracle初学者必知的100个问题
- 面试开始与结束礼貌
- NetCms修改之三:相关新闻的Bug及其修正
- 解决RedHat Linux 7.1下安装Oracle及JDK的问题
- Oracle中的联合主键查询问题
- 利用Oracle管理服务器将数据导入导出
- ORACLE的客户端如何连接到数据库
- 十分钟的代价
- ORA-12154:TNS:无法解析指定的连接标识符
- Oracle数据库的配置方案完全分析
- 字符数组,字符指针,Sizeof总结