JIVE实现帖子精华区--欢迎大家讨论

03-08-27 xsxiaobao

关于精华区的设想:

因为精华区的部分和论坛主题区其实表现是一样,只是帖子不同,所以我就改了一下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>

这样实现精华区的显示。

KingMark
2003-08-27 17:04
思路很好,值得借鉴。

一个建议,其实多建立一个JiveThreadGood表,似乎有些多余了。完全不必要的。因为只是不过对message多做一个标志而已,

我的方式是利用jivemessageprop 来标记,万一jive升级,就没有后顾之忧了。呵呵

-------------------

点击这里可以察看演示

-------------------

banq
2003-08-28 11:26
非常不错,kingmark建议很好,只需要做个jivemessageprop来标记就更好。

猜你喜欢