本帖最后由 yobbozhu 于 2013-8-19 10:59 编辑
本Hack修改实现的强大功能有:
1、门户发布文章时,自动采集外站图片
2、采集后的外站图片转为本地保存,并支持多图自动采集
3、若图片宽度太大,自动缩略图为650px宽度,替换原文章中的大图,并自动加上大图的A链接已查看大图
4、若图片原来还有A标签到外站某处链接,自动替换成大图片的本站查看链接
5、文章内的图片均作为文章附件保存(视为上传的图片附件),并将第一副图片设置为文章封面
修改操作步骤如下:本修改需要hack原文件,请谨慎操作!
1、在/source/include/portalcp/portalcp_article.php中查找以下代码- $content = getstr($_POST['content'], 0, 0, 0, 0, 1);
复制代码 替换为- require_once("./source/gaoshangkeji/gaoshangkeji_functions.php");
- $content = replaceContentsRemoteImages(getstr($_POST['content'], 0, 0, 0, 0, 1), $aid);
复制代码 2、在DiscuzX的根目录下,进入source目录,新建目录gaoshangnkeji,再在此目录下,新建php文件gaoshangkeji_functions.php,该程序文件代码内容如下:- <?php
- /**
- * 1、门户发布文章时,自动采集外站图片
- * 2、采集后的外站图片转为本地保存,并支持多图自动采集
- * 3、若图片宽度太大,自动缩略图为650px宽度,替换原文章中的大图,并自动加上大图的A链接已查看大图
- * 4、若图片原来还有A标签到外站某处链接,自动替换成大图片的本站查看链接
- * 5、文章内的图片均作为文章附件保存(视为上传的图片附件),并将第一副图片设置为文章封面
- * Author : 大宇
- * QQ:366377779
- * Email: 366377779@qq.com
- * Siteurl: http://www.gaoshangkeji.com/Pid/42/
- * Datetime: 2013-08-18
- */
- function replaceContentsRemoteImages($content, $aid){
- //error_reporting(5);
- global $_G;
- require_once("./source/dayu/Snoopy.class.php");
- $snoopy = new Snoopy();
- //本地url中的域名
- $host_domain = $_G['siteurl'];
-
- preg_match_all("@<img(.*)src=['|"](.*)['|"](.*)>@imsU", $content, $match);
- //封面图片
- $pic_cover = '';
- $imagesHrefArr = $match[2];
- foreach($imagesHrefArr as $key => $imageurl) {
- $res = $snoopy->fetch($imageurl);
- if($res) {
- $results = $snoopy->results;
- //后缀名
- $upload = new discuz_upload();
- $ext = $upload->fileext($imageurl);
- //保存路径+文件名
- $dirname = "./data/attachment/portal/".date("Ym/d/");
- @mkdir($dirname, 0777, true);
- $filename = $dirname.random(22);
- $savename = $filename.".".$ext;
- //将第一个图片记录为封面图片
- if(empty($pic_cover)) {
- $pic_cover = $savename;
- }
-
- //保存大图
- $res = file_put_contents($savename, $results);
- //缩略图名
- require_once libfile('class/image');
- $image = new image();
- $thumbimgwidth = 300;
- $thumbimgheight = 300;
- $thumb = $image->Thumb($savename, '', $thumbimgwidth, $thumbimgheight, 2);
- $thumbname = $image->target;
- //判断当前图片外,有无a标签
- $pattern = "@<a [^>]*>[\s]*". preg_quote($match[0][$key])."[\s]*</a>@imsU";
- $r = preg_match($pattern, $content, $match2);
- //替换远程图片为本地图
- $maxWidth = 650;
- //若图片大小超过一定尺寸,替换为缩略图
- if($image->imginfo['width'] > $maxWidth) {
- //缩略图肯定会有a链接,查看原图
- $content = str_replace($match[0][$key], "<a href='{$savename}' target='_blank'><img src='{$thumbname}' /></a>", $content);
- $is_thumb = 1;
- }else{
- //若不需要缩略图,则根据原img标签外是否有a标签,再判断是否需要加a标签
- if($r > 0) {
- $content = str_replace($match[0][$key], "<a href='{$savename}' target='_blank'><img src='{$savename}' /></a>", $content);
- }else{
- $content = str_replace($match[0][$key], "<img src='{$savename}' />", $content);
- }
- $is_thumb = 0;
- }
- //将图片设为该文章的附件
- $setarr = array(
- 'uid' => $_G['uid'],
- 'filename' => '',
- 'attachment' => str_replace("./data/attachment/portal/", "", $savename),
- 'filesize' => filesize($savename),
- 'isimage' => 1,
- 'thumb' => $is_thumb,
- 'remote' => 0,
- 'filetype' => array_pop(explode(".", $savename)),
- 'dateline' => $_G['timestamp'],
- 'aid' => $aid
- );
- $r = C::t('portal_attachment')->insert($setarr, true);
- }
- }
- //将第一个图片设为封面(若有的话)
- if($pic_cover){
- $setarr = array(
- 'pic' => str_replace('./data/attachment/', '', $pic_cover),
- 'thumb' => 1,
- );
- $r = C::t('portal_article_title')->update($aid, $setarr);
- }
- //return
- return $content;
- }
复制代码 3、注意:本函数内使用了第三方网络通信类Snoopy,需要的请自行搜索下载,并放入/source/gaoshangkeji/目录下!
来自群组: Discuz! |