关于精华区的设想:
因为精华区的部分和论坛主题区其实表现是一样,只是帖子不同,所以我就改了一下forum.jsp文件,实现精华区的显示(精华帖子的增加暂时不论)
1、在数据库中新建一个表JiveThreadGood,表结构和JiveThread的表结构相同
2、在Forum类中增加方法以读取精华帖子
public ForumThreadIterator threadsGood(ResultFilter resultFilter);
<p>
|
在DbForum中实现,为了避免代码的重复性,我修改了原来的threads(ResultFilter resultFilter)方法,并增加一个String 变量thread_Query_Table,来设定查询的是jivethread表和jivethreadgood表,修改后的代码如下:
private String thread_Query_Table="jiveThread";
public ForumThreadIterator threads(ResultFilter resultFilter) {
thread_Query_Table="jiveThread";
return threadsReturn(resultFilter);
}
public ForumThreadIterator threadsGood(ResultFilter resultFilter) {
thread_Query_Table="jiveThreadGood";
return threadsReturn(resultFilter);
}
/**
* 集中返回外部对threads()、threads(ResultFilter resultFilter)、threadsGood(ResultFilter resultFilter)调用
*
* @param resultFilter the resultFilter 是过滤设置
* @param query 是经过分析的查询SQL
*
*/
private ForumThreadIterator threadsReturn(ResultFilter resultFilter){
String query = getThreadListSQL(resultFilter, false);
long [] threadBlock = getThreadBlock(query.toString(), resultFilter.getStartIndex());
int startIndex = resultFilter.getStartIndex();
int endIndex;
if (resultFilter.getNumResults() == ResultFilter.NULL_INT) {
endIndex = (int)getThreadCount(resultFilter);
}
else {
endIndex = resultFilter.getNumResults() + startIndex;
}
return new ForumThreadBlockIterator(threadBlock, query.toString(),
startIndex, endIndex, this.id, factory);
}
<p>
|
getThreadListSQL(ResultFilter resultFilter, boolean countQuery)方法中原所有的jivethread字符串全部用变量thread_Query_Table代替
3、修改forum.jsp,增加变量,判断是需要显示普通帖子还是精华帖子
int goodthread = ParamUtils.getIntParameter(request,"goodthread",0);
<p>
|
goodthread == 0 表示显示普通帖子 ==1 表示显示精华帖子
并修改:
ForumThreadIterator threads = forum.threads(filter);
<p>
|
为
ForumThreadIterator threads = null;
if(goodthread==0){
threads = forum.threads(filter);
}else{
threads = forum.threadsGood(filter);
}
<p>
|
这样实现精华区的显示。