在Discuz 中有一项就是给帖子设置封面,很多情况下只能通过手动的方式去设置或者用提交POST请求的式去设置; 但是这都是调用DISCUZ的功能设置的;
有的时候并非万能的,也有用不到的时候;下面就给大家讲一下DISCUZ在设计封面的设计思路; 知道了思路,就可以自己用代码去实现;
好开始:
在设置了封面后,会在 pre_forum_threadimage 中插入一条这样的数据;
tid 是贴子的ID 后面的是对应的附件的地址;
在点击设置封面的时候会看到,程序会请求一个地址如下图
对是他:
http://localhost/dz/forum.php?mod=ajax&action=setthreadcover&aid=1&fid=36&infloat=yes&handlekey=setcover1&inajax=1&ajaxtarget=fwin_content_setcover1
在这个请求的连接中对我们重要的有 mod /action/fid/aid这几个参数; 请求的是Forum.php 那我们去找。
在Forum.php的最后,我们发现了下面一句代码:
require DISCUZ_ROOT.\'./source/module/forum/forum_\'.$mod.\'.php\';
根据这句代码和请求参数,我们找到了:source/module/forum/forum_ajax.php
这个文件,并在里面找到了setthreadcover的处理代码如下:
elseif($_GET[\'action\'] == \'setthreadcover\') { $aid = intval($_GET[\'aid\']); $imgurl = $_GET[\'imgurl\']; require_once libfile(\'function/post\'); if($_G[\'forum\'] && ($aid || $imgurl)) { if($imgurl) { $tid = intval($_GET[\'tid\']); $pid = intval($_GET[\'pid\']); } else { $threadimage = C::t(\'forum_attachment_n\')->fetch(\'aid:\'.$aid, $aid); $tid = $threadimage[\'tid\']; $pid = $threadimage[\'pid\']; } if($tid && $pid) { $thread =get_thread_by_tid($tid); } else { $thread = array(); } if(empty($thread) || (!$_G[\'forum\'][\'ismoderator\'] && $_G[\'uid\'] != $thread[\'authorid\'])) { if($_GET[\'newthread\']) { showmessage(\'set_cover_faild\', \'\', array(), array(\'msgtype\' => 3)); } else { showmessage(\'set_cover_faild\', \'\', array(), array(\'closetime\' => 3)); } } if(setthreadcover($pid, $tid, $aid, 0, $imgurl)) { if(empty($imgurl)) { C::t(\'forum_threadimage\')->...