管理員
積分信息:
威望:6087
金錢:9076810
貢獻:6198
儲蓄:2146643647
|
有圖片展示版的站長可能發現,在重新封面的時候,封面已經不是自己選擇的圖了,而是發帖時系統默認的了。這個問題反饋了半年了,人家不當是問題。所以就這樣了。自己動手吧。(其實有時真不是自己不會修改,也不是自己不想去修改,只是自己修改的太多,影響升級。但人家死活不重視,你拿他沒有辦法。)
需要修改的文件
source/admincp/admincp_counter.php
source/function/function_post.php
source/class/table/table_forum_threadimage.php
老規距,先分析問題。
為什麼會這樣,其實原因很簡單,在重建的時候,沒有讀取自己設置的封面,而只是直接從主題附件裡面選擇最後上傳的那張圖片。
首先,看看數據庫
SELECT *
FROM `pre_forum_threadimage`
LIMIT 0 , 30
tid attachment remote
編輯 刪除 1 201309/23/171902q7ahfsbt7xz957t7.jpg 0
編輯 刪除 2 201310/30/114312uw221w8t8vw1z1yj.jpg 0
編輯 刪除 3 201310/30/114537rlgk0k2kli2z9xg1.jpg 0
編輯 刪除 4 201310/30/114619sutk8vvhunxvdbpk.jpg 0
編輯 刪除 5 201310/30/114859ylvwz196kdmgw19q.jpg 0
編輯 刪除 6 201310/30/120641lgkgq1oa7x00anag.jpg 0
編輯 刪除 7 201310/30/121726olrzq3qkpnw383tz.jpg 0
編輯 刪除 9 201310/30/122003uk63etg6wmtjjh4e.jpg 0
編輯 刪除 11 201310/30/141256ixgxc0m0xzhqg0g0.jpg 0
編輯 刪除 12 201310/30/141344qtaide36tzdilz35.jpg 0
編輯 刪除 14 201312/29/225508mr9f7rdt7dhbbkp9.jpg 0
我們看到,數據庫記錄了封面圖片的原文件。
有原文件記錄就好辦了,再看看文件吧,打開
source/admincp/admincp_counter.php
關鍵部位 451-456行,版本不同略有不同
可以很明顯的看到,數據庫中只記錄了TID,而處理函數是處理PID(紅色字體)
因此我們需要修改如下:
- foreach(C::t('forum_thread')->fetch_all_by_fid_cover_lastpost($fid, $cover, $starttime, $endtime, $current, $pertask) as $thread) {
- $processed = 1;
- $pid = C::t('forum_post')->fetch_threadpost_by_tid_invisible($thread['tid'], 0);
- $pid = $pid['pid'];
- setthreadcover($pid,$thread['tid']);
- }
複製代碼
好,現在我們找到setthreadcover函數。
在source/function/function_post.php文件的最後
- function setthreadcover($pid, $tid = 0, $aid = 0, $countimg = 0, $imgurl = '') {
- global $_G;
- $cover = 0;
- if(empty($_G['uid']) || !intval($_G['setting']['forumpicstyle']['thumbheight']) || !intval($_G['setting']['forumpicstyle']['thumbwidth'])) {
- return false;
- }
- if(($pid || $aid) && empty($countimg)) {
- if(empty($imgurl)) {
- if($aid) {
- $attachtable = 'aid:'.$aid;
- $attach = C::t('forum_attachment_n')->fetch('aid:'.$aid, $aid, array(1, -1));
- }else{
- $attachtable = 'pid:'.$pid;
- $attach = C::t('forum_attachment_n')->fetch_max_image('pid:'.$pid, 'pid', $pid);
-
- }
- if(!$attach) {
- return false;
- }
- if(empty($_G['forum']['ismoderator']) && $_G['uid'] != $attach['uid']) {
- return false;
- }
- $pid = empty($pid) ? $attach['pid'] : $pid;
- $tid = empty($tid) ? $attach['tid'] : $tid;
- $picsource = ($attach['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']).'forum/'.$attach['attachment'];
- } else {
- $attachtable = 'pid:'.$pid;
- $picsource = $imgurl;
- }
- $basedir = !$_G['setting']['attachdir'] ? (DISCUZ_ROOT.'./data/attachment/') : $_G['setting']['attachdir'];
- $coverdir = 'threadcover/'.substr(md5($tid), 0, 2).'/'.substr(md5($tid), 2, 2).'/';
- dmkdir($basedir.'./forum/'.$coverdir);
- require_once libfile('class/image');
- $image = new image();
- if($image->Thumb($picsource, 'forum/'.$coverdir.$tid.'.jpg', $_G['setting']['forumpicstyle']['thumbwidth'], $_G['setting']['forumpicstyle']['thumbheight'], 2)) {
- $remote = '';
- if(getglobal('setting/ftp/on')) {
- if(ftpcmd('upload', 'forum/'.$coverdir.$tid.'.jpg')) {
- $remote = '-';
- }
- }
- $cover = C::t('forum_attachment_n')->count_image_by_id($attachtable, 'pid', $pid);
- if($imgurl && empty($cover)) {
- $cover = 1;
- }
- $cover = $remote.$cover;
- } else {
- return false;
- }
- }
- if($countimg) {
- if(empty($cover)) {
- $thread = C::t('forum_thread')->fetch($tid);
- $oldcover = $thread['cover'];
- $cover = C::t('forum_attachment_n')->count_image_by_id('tid:'.$tid, 'pid', $pid);
- if($cover) {
- $cover = $oldcover < 0 ? '-'.$cover : $cover;
- }
- }
- }
- if($cover) {
- C::t('forum_thread')->update($tid, array('cover' => $cover));
- return true;
- }
- }
複製代碼
發現這個函數有傳遞TID的參數。但在讀取圖片數據的時候只處理了AID和PID的情況,並沒有TID
if(($pid || $aid) && empty($countimg)) {
if(empty($imgurl)) {
if($aid) {
$attachtable = 'aid:'.$aid;
$attach = C::t('forum_attachment_n')->fetch('aid:'.$aid, $aid, array(1, -1));
}else{
$attachtable = 'pid:'.$pid;
$attach = C::t('forum_attachment_n')->fetch_max_image('pid:'.$pid, 'pid', $pid);
}
OK,那我們把他加上吧,修改如下:
- if(($pid || $aid) && empty($countimg)) {
- if(empty($imgurl)) {
- if($aid) {
- $attachtable = 'aid:'.$aid;
- $attach = C::t('forum_attachment_n')->fetch('aid:'.$aid, $aid, array(1, -1));
- } elseif($tid) {
- $attachtable = 'pid:'.$pid;
- $attach = C::t('forum_threadimage')->fetch($tid);
- }else{
- $attachtable = 'pid:'.$pid;
- $attach = C::t('forum_attachment_n')->fetch_max_image('pid:'.$pid, 'pid', $pid);
-
- }
複製代碼
在上面的代碼修改中,我們給forum_threadimage添加了fetch動作。
因此,需要打開source/class/table/table_forum_threadimage.php 文件給他添加fetch動作
- public function fetch($tid) {
- return DB::fetch_first('SELECT * FROM %t WHERE tid=%d', array($this->_table,$tid));
- }
複製代碼
到些全部修改完畢,測試通過。
希望有一定基礎的站長,測試一下,有沒有其它方面的問題
問題回復
一切依您的說法做了,發現不能重建封面(重建速度變很快),
請問是為何呢?
其他文件改了沒問題,
一加入這句就有問題了
} elseif($tid) {
$attachtable = 'pid:'.$pid;
$attach = C::t('forum_threadimage')->fetch($tid);
謝謝
回答
改成這樣即可
- foreach(C::t('forum_thread')->fetch_all_by_fid_cover_lastpost($fid, $cover, $starttime, $endtime, $current, $pertask) as $thread) {
- $processed = 1;
- $pid = C::t('forum_post')->fetch_threadpost_by_tid_invisible($thread['tid'], 0);
- $pid = $pid['pid'];
- setthreadcover($pid);
- setthreadcover($pid,$thread['tid']);
複製代碼 |
|