本帖最后由 elevensky 于 2011-5-31 12:25 编辑
X2增加了图片列表方式后,经常遇到设置附件失败的情况。
用附件firebug的网络项看看了看设置的过程,分析一下。希望有助于排查失败原因。
访问地址:
点击设置封面后,访问地址为:
http://127.0.0.1/x2sc/forum.php?mod=ajax&action=setthreadcover&aid=5&fid=2&infloat=yes&handlekey=setcover5&inajax=1&ajaxtarget=fwin_content_setcover5
根据此地址,找到处理页面:
./source/module/forum/forum_ajax.php中的
} elseif($_G['gp_action'] == 'setthreadcover') {
$aid = intval($_G['gp_aid']);
require_once libfile('function/post');
if($_G['forum'] && $aid) {
$threadimage = DB::fetch_first("SELECT tid, pid, attachment, remote FROM ".DB::table(getattachtablebyaid($aid))." WHERE aid='$aid'");
if($threadimage['tid'] && $threadimage['pid']) {
$firstpost = DB::result_first("SELECT first FROM ".DB::table(getposttablebytid($threadimage['tid']))." WHERE pid='$threadimage[pid]'");
} else {
$firstpost = 0;
}
if(empty($firstpost)) {
showmessage('set_cover_faild', '', array(), array('closetime' => 3));
}
if(setthreadcover(0, 0, $aid)) {
$threadimage = daddslashes($threadimage);
DB::delete('forum_threadimage', "tid='$threadimage[tid]'");
DB::insert('forum_threadimage', array(
'tid' => $threadimage['tid'],
'attachment' => $threadimage['attachment'],
'remote' => $threadimage['remote'],
));
showmessage('set_cover_succeed', '', array(), array('alert' => 'right', 'closetime' => 1));
}
}
showmessage('set_cover_faild', '', array(), array('closetime' => 3));
此页面将会获得传递过来的setthreadcover动作,从而开始设置封面操作。
首先这段代码,通过传递过来的$aid ,获取了,包含此附件对应的主题id和帖子id.
如果他的主题id和帖子id同时存在,则根据pid查找这个对应的主题,如果这个能查到对应的主题。则说明这个图片是主题中的有效aid,如果不是直接返回错误信息。
如果上述条件成立,则通过setthreadcover(0, 0, $aid)将aid设置为对应主题的封面。然后将所有封面单独存储在forum_threadimage表中。
如果你的附件封面不成功。就需要仔细检查下你对应的主题是否符合,这段逻辑处理。
|