會員註冊 / 登入  |  電腦版  |  Jump to bottom of page

JForum中文社群 JForum Chinese Users Community » [修正]讓主題列表時只要該主題內有一篇文章有附件便顯示附件圖示

發表人: andowson, 七段學員
2007-09-18 11:56:29
原本JForum的設計是依某個主題最後一篇文章是否有附件來決定要不要顯示附件圖示, 但是通常容易讓網友錯過有檔案可以下載的文章,我們可以透過修改SQL語法來修正, 由於我的網站是用PostgreSQL作為後端資料庫, 故我需要修改WEB-INF/config/database/postgresql/postgresql.sql:

TopicModel.selectAllByForumByLimit = SELECT t.*, p.user_id AS last_user_id, p.post_time, (SELECT SUM(p.attach) \
FROM jforum_posts p \
WHERE p.topic_id = t.topic_id \
AND p.need_moderate = 0) AS attach \
FROM jforum_topics t, jforum_posts p \
WHERE (t.forum_id = ? OR t.topic_moved_id = ?) \
AND p.post_id = t.topic_last_post_id \
AND p.need_moderate = 0 \
ORDER BY t.topic_type DESC, t.topic_last_post_id DESC \
OFFSET ? LIMIT ?

TopicModel.selectByUserByLimit = SELECT t.*, p.user_id AS last_user_id, p.post_time, (SELECT SUM(p.attach) \
FROM jforum_posts p \
WHERE p.topic_id = t.topic_id \
AND p.need_moderate = 0) AS attach \
FROM jforum_topics t, jforum_posts p \
WHERE p.post_id = t.topic_last_post_id \
AND t.user_id = ? \
AND p.need_moderate = 0 \
AND t.forum_id IN(:fids:) \
ORDER BY t.topic_last_post_id DESC \
OFFSET ? LIMIT ?

登入管理介面後清除主題的Cache即可

發表人: andowson, 七段學員
2007-12-08 13:47:40
除了此外,要讓文章一發表時如果有附件就立即能顯示附件圖示,還要修改net.jforum.view.forum.PostAction這個類別的insertSave()和editSave()兩個methods,主要是在新增完附件後,設定Topic物件的hasAttach屬性為true。我們可透過判斷Post物件的hasAttachments()來決定剛發表或修改的文章有沒有附件,另外,為避免被最後一篇發表的文章誤導,我們還要用原本Topc已有的hasAttach()來一起判斷,只要兩個其中一個為true,即表示該主題有附件:
insertSave():

attachments.insertAttachments(p);
t.setHasAttach(t.hasAttach() || p.hasAttachments());

editSave():

attachments.insertAttachments(post);
t.setHasAttach(t.hasAttach() || post.hasAttachments());

不過,這個方法有個bug,就是如果該主題只有一篇文章有附件,然後又把附件都刪光了,還是會顯示有附件。但是,一般來說通常發表有附件的文章後不太會去刪附件,而且重先載入JForum後也會正常顯示,所以這個應該算可以接受的bug吧!




會員註冊 / 登入  |  電腦版  |  Jump to top of page