ホームページ >バックエンド開発 >PHPチュートリアル >discuz プラグインについては、組織の力を信じてもう一度 csdn に聞きに行きました。

discuz プラグインについては、組織の力を信じてもう一度 csdn に聞きに行きました。

WBOY
WBOYオリジナル
2016-06-23 13:54:521131ブラウズ

このプラグインはTiebaを模倣したもので、投稿一覧にサムネイルを表示するもので、X3.0に最適なスタイルですが、クライアント側ではX2.5しか使えません。このプラグインは X2 で利用できますが、X2.5 環境で動作するようにコードを変更したいだけです。商用目的ではありません。
X3.0では、サムネイルを保存するフォルダーを生成し、その中にサムネイルを保存できます。しかし、2.5 ではこのフォルダーが見つからなかったので、ビルド ステップで何か問題が発生したように感じました。
thumbbuilder.class.php ファイルのコードは以下に掲載されています。専門家は、tiebalist フォルダーが data/attachment/ の下に生成されない理由を分析してください。

<?phpif(!defined('IN_DISCUZ')) {    exit('Access Denied');}if (!class_exists('PhpThumbFactory',false)) require_once('source/plugin/chs_tiebalist/phpthumb/ThumbLib.inc.php');class ThumbBuilder {    private $basedir;	private $baseurl;    public function __construct(){        global $_G;		$this->basedir=!$_G['setting']['attachdir'] ? (DISCUZ_ROOT.'data/attachment/'):$_G['setting']['attachdir'];		$this->baseurl=!$_G['setting']['attachurl'] ? ('data/attachment/'):$_G['setting']['attachurl'];    }    private function getCoverPath($tid){        return 'tiebalist/'.substr(md5($tid), 0, 2).'/'.substr(md5($tid), 2, 2).'/';    }    public function GetThreadCovers($tid,$aids){        $coverpath=$this->getCoverPath($tid);        $fullpath=$this->basedir.$coverpath;        $fullurl=$this->baseurl.$coverpath;        $images=array();        foreach($aids as $aid){            if (file_exists($fullpath.$aid.'.jpg')) $images[]=array('aid'=>$aid,'thumbfile'=>$fullurl.$aid.'.jpg');          }        return $images;    }    public function CreateThreadCovers($tid,$images,$force=0){        $path=$this->basedir.$this->getCoverPath($tid);		dmkdir($path);        global $_G;        $setting=&$_G['cache']['plugin']['chs_tiebalist'];        $thumbheight=$setting['thumbheight']?$setting['thumbheight']:80;        $thumbmaxwidth=$setting['thumbmaxwidth']?$setting['thumbmaxwidth']:300;        foreach($images as $aid=>$image){            $target=$path.$aid.'.jpg';            if (file_exists($target)&&(!$force)) continue;            try {				$thumb = PhpThumbFactory::create($image,array('resizeUp'=>true));                $dimensions=$thumb->getCurrentDimensions();                $newwidth=$thumbheight*$dimensions['width']/$dimensions['height'];                if ($newwidth>$thumbmaxwidth) {                    $thumb->adaptiveResize($thumbmaxwidth,$thumbheight);                }else {                    $thumb->resize(0,$thumbheight);//封面不限定宽度                }				$thumb->save($target);			}catch(Exception $oEx){//捕获生成缩略图可能抛出的异常,防止中断                writelog('tiebalistlog',$oEx->getMessage());				continue;			}        }        if ($force) {            $thumbfiles=$this->getfiles($path,'jpg');            $aids=array_keys($images);            foreach($thumbfiles as $filename){                $aid=intval(substr($filename,0,strpos($filename,'.')));                if (!in_array($aid,$aids)) unlink($path.$filename);            }        }    }        private function getfiles($dir,$mask=''){         $fileArray=array();         if (false != ($handle = opendir ($dir))) {            while (false!==($file=readdir($handle))){                if ($file == '.' || $file == '..') continue;                if (empty($mask)) $fileArray[]=$file;                else if (substr(strrchr($file, '.'), 1)==$mask) $fileArray[]=$file;            }          }         return $fileArray;    }}?>


ディスカッション (解決策) への返信

buildthumb.inc.php の内容も役に立ちそうです

<?phpif(!defined('IN_DISCUZ')) {    exit('Access Denied');}class plugin_chs_tiebalist {       function common() {}}class plugin_chs_tiebalist_forum extends plugin_chs_tiebalist {     function forumdisplay_thread_subject_output(){           global $_G;        $setting=&$_G['cache']['plugin']['chs_tiebalist'];        if (!$setting['enabled']) return;        $fid = intval($_G['fid']);        $forumselected=unserialize($setting['forumselected']);        if(!in_array($fid,$forumselected)) return;                if ($_G['forum']['picstyle'] == 0||$_G['cookie']['forumdefstyle']==1){            global $_G;            $threadlist = array();            $threadlist = $_G['forum_threadlist'];            $tiebalist = array();            $messagelength=$setting['messagelength']?$setting['messagelength']:100;            $picturenum=$setting['$picturenum']?$setting['$picturenum']:3;            include libfile('function/post');            require_once('thumbbuilder.class.php');            $oTB=new ThumbBuilder();            foreach($threadlist as $key => $value){                $position=($value['special']==2)?2:1;//商品主题的首帖在第二楼,回复从第3楼开始                $firstpost=C::t('forum_post')->fetch_all_by_tid_position('tid:'.$value['tid'],$value['tid'],$position);                if (count($firstpost)>0&&$firstpost[0]['invisible']>=0){                    $post=&$firstpost[0];                    $message=messagecutstr($post['message'],$messagelength);                    $tiebalist[$key] = '<p>'.$message.'</p>';                    $attachs=C::t('forum_attachment_n')->fetch_all_by_id('pid:'.$post['pid'],'pid',$post['pid'],false,true,false,false,$picturenum);                    $aids=array_keys($attachs);                    if ($aids){                        $imagelist=$oTB->GetThreadCovers($value['tid'],$aids);                        if (count($imagelist)>0) {                            $tiebalist[$key].='<ul id="thumblist_'.$value['tid'].'" class="thumblist cl">';                            foreach($imagelist as $ii=>$image){                                $attach=$attachs[$image['aid']];                                $forumimg=($attach['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']).'forum/'.$attach['attachment'];                                $tiebalist[$key].='<li data="'.$forumimg.'" onclick="showpicture('.$value['tid'].','.$ii.');return false;"><img src="'.$image['thumbfile'].'"/></li>';                            }                            $tiebalist[$key].='</ul>';                            $tiebalist[$key].=                            '<div id="picturebox_'.$value['tid'].'" class="picturedisplay" style="display:none;">                                <div class="picturecontrol">                                    <a class="icon_close" onclick="closepicture('.$value['tid'].');return false;">收起</a>                                    <span>|</span>                                    <a class="icon_viewpost" href="forum.php?mod=viewthread&tid='.$value['tid'].'&extra=page%3D1">查看帖子</a>                                    <span>|</span>                                    <a class="icon_turnleft" onclick="turnimg('.$value['tid'].',1);return false;">左转</a>                                    <span>|</span>                                    <a class="icon_turnright" onclick="turnimg('.$value['tid'].',0);return false;">右转</a>                                </div>                                <div class="picturewrap" >                                    <a onclick="closepicture('.$value['tid'].');return false;"><img class="picture" src="" /></a>                                    <div class="goprevious"></div>                                    <div class="gonext"></div>                                </div>                            </div>';                          }                    }                }            }            return $tiebalist;        }    }    function  forumdisplay_threadlist_bottom() {		global $_G;        $setting=&$_G['cache']['plugin']['chs_tiebalist'];        if (!$setting['enabled']) return;        $fid = intval($_G['fid']);        $forumselected=unserialize($setting['forumselected']);        if(!in_array($fid,$forumselected)) return;		$echo = '<link rel="stylesheet" type="text/css" href="source/plugin/chs_tiebalist/template/css/tiebalist.css" />';		$echo .= '<script src="source/plugin/chs_tiebalist/template/js/tiebalist.js"  type="text/javascript"></script>';        $picturemaxwidth=$setting['picturemaxwidth']?$setting['picturemaxwidth']:600;        $echo .='<script type="text/javascript">var picturemaxwidth='.$picturemaxwidth.';</script>';		return $echo;	}    function post_chs_tiebalist_message($params) {		global $_G, $tid, $pid, $modthread, $isfirstpost;        $setting=&$_G['cache']['plugin']['chs_tiebalist'];        if (!$setting['enabled']) return;        $fid = intval($_G['fid']);        $forumselected=unserialize($setting['forumselected']);        if(!in_array($fid,$forumselected)) return;		list($msg, $url_forward, $values, $extraparam) = $params['param'];		if (($msg == 'post_newthread_succeed')||($msg == 'post_newthread_mod_succeed')) {			$pid = $modthread->pid;			$this->create_covers($pid,$tid);			dshowmessage($msg, $url_forward, $values, $extraparam);		}else if (($msg == 'post_edit_succeed')&&$isfirstpost) {			$tid=$_G['tid'];			$this->create_covers($pid,$tid);			dshowmessage($msg, $url_forward, $values, $extraparam);		}    }    private function create_covers($pid,$tid){		global $_G;        $setting=&$_G['cache']['plugin']['chs_tiebalist'];        $picturenum=$setting['$picturenum']?$setting['$picturenum']:3;		//获取帖子的图片		$attachs=C::t('forum_attachment_n')->fetch_all_by_id('pid:'.$pid,'pid',$pid,false,true,false,false,$picturenum);		$images=array();		foreach($attachs as $attach){			$images[$attach['aid']]=($attach['remote'] ? $_G['setting']['ftp']['attachdir'] : $_G['setting']['attachdir']).'forum/'.$attach['attachment'];		}		if ($images){			require_once("thumbbuilder.class.php");			$oTB=new ThumbBuilder();			$oTB->CreateThreadCovers($tid,$images);		}	}}?>

オリジナルのプラグイン作者を見つけて見てください!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。