分享
  • 收藏
  • 举报
    X
    如何修改获取内容页第一张图,我需要让它获取内容里的前9张图,请问如何修改?
    • HarryHart 消费528.56元 2019-12-10 12:10 12:10
    965
    8

    <?php

    namespace app\common\hook;

    use app\common\controller\IndexBase;

    use think\Db;

    class FirstPic extends IndexBase{

        public $info=[

            //归属接口,必填

            'hook_key'=>'template_form_foot,cms_add_end,cms_edit_end,cms_delete_end',

            //归属插件,可为空

            'plugin_key'=>'',

            //开发者

            'author'=>'torylf',

            //开发者网站

            'author_url'=>'',

            //功能描述

            'about'=>'获取内容页第一张图',

        ];

        public function templateFormFoot(){

            if(SHIELD_PLUGINS===true){

                return;

            } //避免和自己的模块冲突

            if(!empty(config('system_dirname'))){

                if(!preg_match('/(content\/add)/i',request()->url(true))&&!preg_match('/(content\/edit)/i',request()->url(true))){

                    return;

                }

            }

            if(strstr(request()->url(),config('admin.filename').'/')||strstr(request()->url(),"member.php/")){

                if(request()->action()=='edit'||request()->action()=='add'){

                    $template=ROOT_PATH.'template/admin_style/default/hook/shield/FPicSwitch.htm';

                    echo $this->fetch($template);

                }

            }

        }

        public function cmsAddEnd($id=0,$data=[]){

            if(SHIELD_PLUGINS===true){

                return;

            } //避免和自己的模块冲突

            //增加采集公众号文章的图片

            if(strstr(request()->url(),'copynews')){

                $data['data']['fpic']=1;

            }

            if(!$data['data']['ispic']&&$data['data']['fpic']==1){

                $pattern="/<img.*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png|\.jpeg].+?))[\'|\"].*?[\/]?>/i";

                $f=preg_match($pattern,$data['data']['content'],$img);

                if($f){

                    $tmpname ='';

                    if(!preg_match("/(\.gif|\.jpg|\.png|\.jpeg)/",$img[1])){

                        $tmpname = rand(100,10000).time() . '.jpg';

                    }


                }

                $url=$img[1];

                if($url){

                    $save_dir=config('upload_path').DS.'thumb'.DS.date('Ymd');

                    if($tmpname == ''){

                        $picdir = self::getImage($url, $save_dir);

                    }else{

                        //如果获取到了没有后缀名的地址,这里给他传进去一个带后缀类型的参数,否则抓取文件可能会0字节,无法写入

                        $picdir = self::getImage($url, $save_dir,$tmpname);

                    }

                    //防止windows斜杠变成反斜杠存入数据库导致路径不对

                    $picdir['save_path']=str_replace('\\','/',$picdir['save_path']);

                    $arr=Db::name(request()->module().'_sort')->where('id',$data['data']['fid'])->find();

                    if(request()->module() =='mall'&&modules_config('mall')['version_id']=='268'){

                        $a=Db::name(request()->module().'_content')->where('id',$id)->update([

                            'picurl'=>$picdir['save_path'],

                            'ispic'=>1,

                        ]);

                    }else{

                        $a=Db::name(request()->module().'_content'.$arr['mid'])->where('id',$id)->update([

                            'picurl'=>$picdir['save_path'],

                            'ispic'=>1,

                        ]);

                    }

                }

            }

        }

        public function cmsEditEnd($data=[],$result=[]){

            if(SHIELD_PLUGINS===true){

                return;

            } //避免和自己的模块冲突

            if(!$data['ispic']&&$data['fpic']==1){

                $pattern="/<img.*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png|\.jpeg].+?))[\'|\"].*?[\/]?>/i";

                $f=preg_match($pattern,$data['content'],$img);

                if($f){

                    $tmpname ='';

                    if(!preg_match("/(\.gif|\.jpg|\.png|\.jpeg)/",$img[1])){

                        $tmpname = rand(100,10000).time() . '.jpg';

                    }

                }

                $url=$img[1];

                if($url){

                    $save_dir=config('upload_path').DS.'thumb'.DS.date('Ymd');

                    if($tmpname == ''){

                        $picdir = self::getImage($url, $save_dir);

                    }else{

                        //如果获取到了没有后缀名的地址,这里给他传进去一个带后缀类型的参数,否则抓取文件可能会0字节,无法写入

                        $picdir = self::getImage($url, $save_dir,$tmpname);

                    }

                    //$this->error(dump($picdir));

                    //防止windows斜杠变成反斜杠存入数据库导致路径不对

                    $picdir['save_path']=str_replace('\\','/',$picdir['save_path']);

                    $arr=Db::name(request()->module().'_sort')->where('id',$data['fid'])->find();

                    if(request()->module() =='mall'&&modules_config('mall')['version_id']=='268'){

                        Db::name(request()->module().'_content')->where('id',$data['id'])->update([

                            'picurl'=>$picdir['save_path'],

                            'ispic'=>1,

                        ]);

                    }else{

                        Db::name(request()->module().'_content'.$arr['mid'])->where('id',$data['id'])->update([

                            'picurl'=>$picdir['save_path'],

                            'ispic'=>1,

                        ]);

                    }

                    /*

                    //调试错误用

                    $hookerror = '';

                    $file  = config('upload_path'). DS . 'hook.txt';

                    file_put_contents($file, $hookerror.PHP_EOL,FILE_APPEND);

                    */

                }

            }

        }

        public function cmsDeleteEnd($info,$module){

            if(SHIELD_PLUGINS===true){

                return;

            } //避免和自己的模块冲突

            //删除文章时也删除提取的缩略图

            //Db::name('attachment')->where('id',$info['id'])->delete();

            $delfile=PUBLIC_PATH.$info['picurl'];

            $d=unlink($delfile);

        }

        /**

         *功能:下载远程图片保存到本地

         *参数:文件url,保存文件目录,保存文件名称,使用的下载方式

         *当保存文件名称为空时则使用远程文件原来的名称

         */

        private static function getImage($url,$save_dir='',$filename='',$type=0){

            $domain=request()->domain();

            if(trim($url)==''){

                return ['file_name'=>'','save_path'=>'','error'=>1];

            }

            if(0==preg_match('/^http[s]{0,1}:\/\//',$url)){

                $url=$domain.$url;

                //$url= $domain.urldecode($url);

                // $url = str_replace('&amp;','&',$url);

            }

            if(trim($save_dir)==''){

                $save_dir='./';

            }

            if(trim($filename)==''){//保存文件名

                $ext=strrchr($url,'.');

                if($ext!='.gif'&&$ext!='.jpg'&&$ext!='.png'&&$ext!='.jpeg'){

                    return ['file_name'=>'','save_path'=>'','error'=>3];

                }

                $filename=rand(100,10000).time().$ext;

            }

            if(0!==strrpos($save_dir,'/')){

                $save_dir.='/';

            }

            //创建保存目录

            if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){

                return ['file_name'=>'','save_path'=>'','error'=>5];

            }

            //获取远程文件所采用的方法

            if($type){

                $ch=curl_init();

                $timeout=5;

                curl_setopt($ch,CURLOPT_URL,$url);

                curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

                curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);

                $img=curl_exec($ch);

                curl_close($ch);

            }else{

                ob_start();

                readfile($url);

                $img=ob_get_contents();

                ob_end_clean();

            }

            //$size=strlen($img);

            //文件大小

            $fp2=@fopen($save_dir.$filename,'wb');

            fwrite($fp2,$img);

            fclose($fp2);

            unset($img);

            $path=str_replace(PUBLIC_PATH,'',$save_dir);

            return ['url'=>$url,'file_name'=>$filename,'save_path'=>$path.$filename,'error'=>0];

        }

    }




    10
    赏礼
    赏钱
    收藏
    点击回复
        全部留言
    • 8
    • 阿赖耶识 程序开发者 消费:24.43元 2019-12-10 22:12 22:126楼
      提供思路:
      首先根据正则表达式获取内容里匹配的全部图片。然后循环采集到本地,并保存数组。
      再把数组拼接成字符串存入数据库就可以了,当然在此期间你可以做个判断,需要多少张就存入多少张
      HarryHart 消费:528.56元 iPhone 2019-12-10 22:20
      我是想直接修改你发布的这个插件
      阿赖耶识 消费:24.43元 2019-12-10 22:24
      可以,我这个本来就是免费的,你直接修改成获取多图的再发布收费的或者免费的都可以。我反正也没什么时间更新新功能,除非有重大bug,不然基本趋于稳定的插件,不会再修改或添加新功能什么的
      HarryHart 消费:528.56元 iPhone 2019-12-10 22:26
      @torylf 谢谢
    0 赏钱 赏礼回复
    • wr1688 风格开发者 消费:2593.25元 2019-12-10 12:43 12:43
      华为
      6楼
      抱歉,我可能理解错了,你应该是想在发布的时候就自动获取是吧?
      银杏114在线 消费:3609.79元 2019-12-10 22:02
      看他描述的意思是想发布的时候自动获取的
      HarryHart 消费:528.56元 iPhone 2019-12-10 22:03
      @银杏114在线 是的,我想知道怎么自动获取9张图
    0 赏钱 赏礼回复
    • wr1688 风格开发者 消费:2593.25元 2019-12-10 12:42 12:42
      华为
      6楼
      官方不是都有教程吗?获取内容中的图片,然后if $i>9 hide 给img加上这么一个class,最好用上随风的那个缩略图插件,这样的话就算加载出全部的内容页图片,也没那么大压力
    0 赏钱 赏礼回复
    更多回复
    恢复多功能编辑器
  • 3 1
  • 推荐内容
    扫一扫访问手机版
    请选择要切换的马甲:

     
    网页即时交流
    QQ咨询
    咨询热线
    020-28998648