CMS4J2008 隐藏文章被搜索出来的解决办法

来源:互联网 发布:win10自带录屏软件 编辑:程序博客网 时间:2024/06/05 00:43

这是我在CSDN的处女作,原来一直在QQ空间里写东西的,今天换换地方,也来混混高级群。希望能为大家提供帮助。废话不多说,进入正题。

 

前阵子用了java cms的一个模版,cms4j2008是免费版的,这个模板用起来还是不错的。但是发现他的搜索上,有一个非常致命的问题,就是如果我把后台的显示时间调整了,但是在搜索时,依然会出现搜出来的情况。见图1:

 

 

这里的显示时间,是设定文章到了这个时间才能看见用的。在使用<cms4j:artical>这个标签获得文章全部信息时,会读取这个属性,这样文章就不显示出来了,而且他还加了判断,如果不到就将页面全部信息替换为空(感觉给用户个提示更好!)。

 

但是搜索时,<cms4j:site_search>这个标签没用获取这个属性,而是直接将全部信息全部得到,并显示出来,造成了下面的结果

如图2:

 

这是一个严重的问题,我觉得应该在搜索时,加上时间判断,这样的问题不该出现在cms4j的身上啊,而且08,2010版的都有这个问题。

下面说一下解决办法:

由于cms4j已经把相应的文件打成了jar包,所以重写源码有些困难了,所以我的方法是用js来解决。

方法1(失败)

我想在search_result_2.jsp这个页面上下手,让他搜出来信息后,加以判断,是现在时间之前的显示,不是的用style = "display:none"来隐藏它,具体代码就不贴了,因为虽然实现了效果,但是分页的时候,由于算出了count,所以造成前几页的数据都是空的,但是页码还在,失败告终!

方法2(成功)

第一个失败了,只好在搜索上进行下手了,我发现他在搜索时用url传参数时,能传递一个enddate的参数,就是搜索时的日期选择的结束时间。如图3:

于是我想到了一个方法,就是对参数就行判断,思路是(有点小问题,后面说)

1:如果用户没设置,则传递一个当前日期给SearchResult

2:如果用户选择了,而且时间是小于或是等于当前时间的话,传用户的

3:如果用户选择了,而且时间是大于当前时间的话,传当前时间

但是设计完之后,发现日期上有问题了,他搜索出来的时间比我的早一点,比如今天16,但是他最多

显示出15号的,而16号的却不能显示,所以又在当前日期上增加了一天。

代码如下:

先修改index.jsp的页面

1、搜索的位置增加一个获得当前日期的方法:

<td><%Calendar a = Calendar.getInstance();a.add(Calendar.DATE, +1);java.util.Date now = a.getTime();SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");%></td>

2、在url传参数的地方,加上这个参数:

onClick="location.href='SearchResult.jsp?cluster_node_id=<%=cluster_node_id%>&enddate=<%= now%>&s=' + document.CMS4JSearchForm.SEARCH_WORD.value;">

3、头部加上调用的类

<%@ page import="java.text.*,java.util.*"%>

再修改/symbol/fullsearch/search_result_2.jsp这个文件

1、在<cms4j:class>里增加一个隐藏的td,获得当前时间的

<td  id = "nowTime" style = "display:none"><%Calendar a = Calendar.getInstance();a.add(Calendar.DATE, +1);Date now = a.getTime();SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");out.println(fmt.format(now));%></td>

2、再在头部添加如下的js

<script>
 function f() {
  var old = eval(document.getElementById('endDate')).value; //得到用户的结束时间
var now = document.getElementById('nowTime').innerText;//得到td的值也就是当前时间
if (old != null) {
   var dA=new Date(old.replace(/-/,"/"));//
dB=new Date(now.replace(/-/,"/"));
   if(Date.parse(dA) <= Date.parse(dB)){
  
   } else {
    eval(document.getElementById('endDate')).value = now;
    var Btn = document.getElementById('Submit2');
    Btn.onclick();
   }
  }else {
   eval(document.getElementById('endDate')).value = now;
  }
 }
</script>

最后修改Search.jsp

1、在<body  onLoad="pageInit();f()">中调f()方法就可以了

额外补充一点,如果你不想你的内容被看见的话,搜索时,修改搜索的条件

在SearchResulet。jsp里(调成title就是只搜索文章的标题)

<jsp:param name="SEARCH_FIELD" value="title"></jsp:param>

还有要把/symbol/fullsearch/search_result_2.jsp  成这样的

<span class="page_class_content"><span class="STYLE9"></span></span>

就写这些吧,希望能够对大家有帮助。

原创粉丝点击