让门户文章发布时自动采集外站图片,自动上传为附件并设置封面-Discuz教程下载

让门户文章发布时自动采集外站图片,自动上传为附件并设置封面

开通本站Svip会员,全站资源免费下
本Hack修改实现的强大功能有:
1、门户发布文章时,自动采集外站图片
2、采集后的外站图片转为本地保存,并支持多图自动采集
3、若图片宽度太大,自动缩略图为650px宽度,替换原文章中的大图,并自动加上大图的A链接已查看大图
4、若图片原来还有ATAG.html" target="_blank" class="relatedlink">标签到外站某处链接,自动替换成大图片的本站查看链接
5、文章内的图片均作为文章附件保存(视为上传的图片附件),并将第一副图片设置为文章封面

修改操作步骤如下:本修改需要hack原文件,请谨慎操作!
1、在/source/include/portalcp/portalcp_article.php中查找以下代码
  1. $content = getstr($_POST['content'], 0, 0, 0, 0, 1);
复制代码
替换为
  1. require_once("./source/tuyuanma/tuyuanma_functions.php");
  2. $content = replaceContentsRemoteImages(getstr($_POST['content'], 0, 0, 0, 0, 1), $aid);
复制代码
2、在DiscuzX的根目录下,进入source目录,新建目录tuyuanma,再在此目录下,新建php文件tuyuanma_functions.php,该程序文件代码内容如下:
  1. <?php
  2. /**
  3. * 1、门户发布文章时,自动采集外站图片
  4. * 2、采集后的外站图片转为本地保存,并支持多图自动采集
  5. * 3、若图片宽度太大,自动缩略图为650px宽度,替换原文章中的大图,并自动加上大图的A链接已查看大图
  6. * 4、若图片原来还有A标签到外站某处链接,自动替换成大图片的本站查看链接
  7. * 5、文章内的图片均作为文章附件保存(视为上传的图片附件),并将第一副图片设置为文章封面
  8. * QQ:3197813386
  9. * Email: tuyuanma@qq.com
  10. * Siteurl: https://www.tuyuanma.com/
  11. * Datetime: 2013-08-18
  12. */
  13. function replaceContentsRemoteImages($content, $aid){
  14.     //error_reporting(5);
  15.     global $_G;

  16.     require_once("./source/tuyuanma/Snoopy.class.php");
  17.     $snoopy = new Snoopy();

  18.     //本地url中的域名
  19.     $host_domain = $_G['siteurl'];
  20.    
  21.     preg_match_all("@<img(.*)src=['|"](.*)['|"](.*)>@imsU", $content, $match);

  22.     //封面图片
  23.     $pic_cover = '';

  24.     $imagesHrefArr = $match[2];
  25.     foreach($imagesHrefArr as $key => $imageurl) {
  26.         $res = $snoopy->fetch($imageurl);
  27.         if($res) {
  28.             $results = $snoopy->results;

  29.             //后缀名
  30.             $upload = new discuz_upload();
  31.             $ext = $upload->fileext($imageurl);

  32.             //保存路径+文件名
  33.             $dirname = "./data/attachment/portal/".date("Ym/d/");
  34.             @mkdir($dirname, 0777, true);
  35.             $filename = $dirname.random(22);
  36.             $savename = $filename.".".$ext;

  37.             //将第一个图片记录为封面图片
  38.             if(empty($pic_cover)) {
  39.                 $pic_cover = $savename;
  40.             }
  41.             
  42.             //保存大图
  43.             $res = file_put_contents($savename, $results);

  44.             //缩略图名
  45.             require_once libfile('class/image');
  46.             $image = new image();
  47.             $thumbimgwidth = 300;
  48.             $thumbimgheight = 300;
  49.             $thumb = $image->Thumb($savename, '', $thumbimgwidth, $thumbimgheight, 2);
  50.             $thumbname = $image->target;

  51.             //判断当前图片外,有无a标签
  52.             $pattern = "@<a [^>]*>[\s]*". preg_quote($match[0][$key])."[\s]*</a>@imsU";
  53.             $r = preg_match($pattern, $content, $match2);


  54.             //替换远程图片为本地图
  55.             $maxWidth = 650;
  56.             //若图片大小超过一定尺寸,替换为缩略图
  57.             if($image->imginfo['width'] > $maxWidth) {
  58.                 //缩略图肯定会有a链接,查看原图
  59.                 $content = str_replace($match[0][$key], "<a href='{$savename}' target='_blank'><img src='{$thumbname}' /></a>", $content);
  60.                 $is_thumb = 1;
  61.             }else{
  62.                 //若不需要缩略图,则根据原img标签外是否有a标签,再判断是否需要加a标签
  63.                 if($r > 0) {
  64.                     $content = str_replace($match[0][$key], "<a href='{$savename}' target='_blank'><img src='{$savename}' /></a>", $content);
  65.                 }else{
  66.                     $content = str_replace($match[0][$key], "<img src='{$savename}' />", $content);
  67.                 }
  68.                 $is_thumb = 0;
  69.             }

  70.             //将图片设为该文章的附件
  71.             $setarr = array(
  72.                 'uid' => $_G['uid'],
  73.                 'filename' => '',
  74.                 'attachment' => str_replace("./data/attachment/portal/", "", $savename),
  75.                 'filesize' => filesize($savename),
  76.                 'isimage' => 1,
  77.                 'thumb' => $is_thumb,
  78.                 'remote' => 0,
  79.                 'filetype' => array_pop(explode(".", $savename)),
  80.                 'dateline' => $_G['timestamp'],
  81.                 'aid' => $aid
  82.             );
  83.             $r = C::t('portal_attachment')->insert($setarr, true);
  84.         }
  85.     }

  86.     //将第一个图片设为封面(若有的话)
  87.     if($pic_cover){
  88.         $setarr = array(
  89.             'pic' => str_replace('./data/attachment/', '', $pic_cover),
  90.             'thumb' => 1,
  91.         );
  92.         $r = C::t('portal_article_title')->update($aid, $setarr);
  93.     }

  94.     //return
  95.     return $content;
  96. }
复制代码
3、注意:本函数内使用了第三方网络通信类Snoopy,需要的请自行搜索下载,并放入/source/tuyuanma/目录下!

本站下载:
亲爱的游客您好,请 登录 后进行 回复

全部评论 0

您需要登录后才可以回帖 立即登录
登录
0
0
0
返回顶部