在dede中使用ueditor1.4.3
上一次使用ueditor是一年前,都忘记是什么版本了,今天再去ueditor的官网发现新版本有较大改进,于是准备将它用在自己的dede网站中,ueditor1.4.3比以往的版本好用很多,最明显的改进有如下几点:
1.最大的改进就是支持chrome浏览器下的中文输入,以前在chrome下输入中文是不行的(我用的是gbk版本)。
2.配置相当简单第一次折腾ueditor花了几天事件才完全将图片和文件上传搞定,这次只花了一个多小时。
3.文字格式更合理,以前如果上一行文字是粗体,按回车进入下一行还是粗体。现在不是了。
4.增加了一些新功能。
5.界面更漂亮。
整体的使用感觉就是更像一个本地编辑器了。如果你之前使用的是比较老的版本,这次升级是值得的。
本文将介绍在dede中如何使用ueditor1.4.3的php GBK版本。UTF-8版本应该是一样的。
首先下载ueditor1.4.3
到官网下载ueditor1.4.3,我这里下载的是php gbk版本,当然用在dede上肯定得下载php版本。
http://ueditor.baidu.com/website/download.html
将下载下来的zip解压,为了方便我将得到的文件夹改名为ueditor1.4.3,然后将ueditor1.4.3文件夹整个放到/include/目录下面:
之所以没有命名为ueditor是因为我想保留之前的老版本的ueditor编辑器。
Ueditor的配置
Ueditor的配置非常简单,只需要修改三处:
- 修改dede获取编辑器的函数SpGetEditor
在/include/inc/inc_fun_funAdmin.php中找到SpGetEditor,我们可以看到这里面有几个判断条件:else if($GLOBALS['cfg_html_editor']
=***,为了让dede支持ueditor1.4.3我们增加一个else if:
else if($GLOBALS\['cfg_html_editor'\]=='ueditor1.4.3')
{
$fvalue = $fvalue=='' ? '<p></p>' : $fvalue;
$code = '<script type="text/javascript" charset="GBK" src="'.$GLOBALS\['cfg_cmspath'\].'/include/ueditor1.4.3/ueditor.config.js"></script>';
$code .= '<script type="text/javascript" charset="GBK" src="'.$GLOBALS\['cfg_cmspath'\].'/include/ueditor1.4.3/ueditor.all.min.js"></script>';
$code .= '<link rel="stylesheet" type="text/css" href="'.$GLOBALS\['cfg_cmspath'\].'/include/ueditor1.4.3/themes/default/css/ueditor.css"/>';
//$code .= '<textarea name="'.$fname.'" id="'.$fname.'" style="width:100%;">'.$fvalue.'</textarea>';
$code .= '<script type="text/plain" name="'.$fname.'" id="'.$fname.'">'.$fvalue.'</script>';
if( !empty($toolbar\[$etype\]))
{
$code .= '<script type="text/javascript">UE.getEditor("'.$fname.'",{toolbars:\[\["Source","|",
"bold", "italic", "underline","|","fontsize","forecolor","emotion","Undo", "Redo"\]\],initialFrameHeight:100});</script>';
}
else
{
$code .= '<script type="text/javascript">UE.getEditor("'.$fname.'",{initialFrameHeight:450});</script>';
}
if($gtype=="print")
{
echo $code;
}
else
{
return $code;
}
}
这里的判断条件是$GLOBALS['cfg_html_editor']=='ueditor1.4.3', 注意里面引用的js路径需要修改成你自己的,我这里是/include/ueditor1.4.3/因为我的目录名称是ueditor1.4.3。
2.修改Ueditor的配置。
这主要是修改Ueditor保存图片等文件的时候的保存路径。
打开/include/ueditor1.4.3/php/config.json文件:
按照文字提示修改路径,我修改后的配置如下,你完全可以采用我这种配置,这里的配置和具体网站几乎没啥关系:
/* 前后端通信相关的配置,注释只允许使用多行方式 */
{
/* 上传图片配置项 */
"imageActionName": "uploadimage", /* 执行上传图片的action名称 */
"imageFieldName": "upfile", /* 提交的图片表单名称 */
"imageMaxSize": 4048000, /* 上传大小限制,单位B */
"imageAllowFiles": \[".png", ".jpg", ".jpeg", ".gif", ".bmp"\], /* 上传图片格式显示 */
"imageCompressEnable": false, /* 是否压缩图片,默认是true */
"imageCompressBorder": 1600, /* 图片压缩最长边限制 */
"imageInsertAlign": "none", /* 插入的图片浮动方式 */
"imageUrlPrefix": "", /* 图片访问路径前缀 */
"imagePathFormat": "/uploads/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
/* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
/* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
/* {time} 会替换成时间戳 */
/* {yyyy} 会替换成四位年份 */
/* {yy} 会替换成两位年份 */
/* {mm} 会替换成两位月份 */
/* {dd} 会替换成两位日期 */
/* {hh} 会替换成两位小时 */
/* {ii} 会替换成两位分钟 */
/* {ss} 会替换成两位秒 */
/* 非法字符 \\ : * ? " < > | */
/* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */
/* 涂鸦图片上传配置项 */
"scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
"scrawlFieldName": "upfile", /* 提交的图片表单名称 */
"scrawlPathFormat": "/uploads/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
"scrawlUrlPrefix": "", /* 图片访问路径前缀 */
"scrawlInsertAlign": "none",
/* 截图工具上传 */
"snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
"snapscreenPathFormat": "/uploads/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"snapscreenUrlPrefix": "", /* 图片访问路径前缀 */
"snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */
/* 抓取远程图片配置 */
"catcherLocalDomain": \["127.0.0.1", "localhost", "img.baidu.com"\],
"catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
"catcherFieldName": "source", /* 提交的图片列表表单名称 */
"catcherPathFormat": "/uploads/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"catcherUrlPrefix": "", /* 图片访问路径前缀 */
"catcherMaxSize": 2048000, /* 上传大小限制,单位B */
"catcherAllowFiles": \[".png", ".jpg", ".jpeg", ".gif", ".bmp"\], /* 抓取图片格式显示 */
/* 上传视频配置 */
"videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
"videoFieldName": "upfile", /* 提交的视频表单名称 */
"videoPathFormat": "/uploads/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"videoUrlPrefix": "", /* 视频访问路径前缀 */
"videoMaxSize": 2048000, /* 上传大小限制,单位B,默认100MB */
"videoAllowFiles": \[
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"\], /* 上传视频格式显示 */
/* 上传文件配置 */
"fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
"fileFieldName": "upfile", /* 提交的文件表单名称 */
"filePathFormat": "/uploads/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
"fileUrlPrefix": "", /* 文件访问路径前缀 */
"fileMaxSize": 2048000, /* 上传大小限制,单位B,默认50MB */
"fileAllowFiles": \[
".png", ".jpg", ".jpeg", ".gif", ".bmp",
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
\], /* 上传文件格式显示 */
/* 列出指定目录下的图片 */
"imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
"imageManagerListPath": "/uploads/", /* 指定要列出图片的目录 */
"imageManagerListSize": 20, /* 每次列出文件数量 */
"imageManagerUrlPrefix": "", /* 图片访问路径前缀 */
"imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
"imageManagerAllowFiles": \[".png", ".jpg", ".jpeg", ".gif", ".bmp"\], /* 列出的文件类型 */
/* 列出指定目录下的文件 */
"fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
"fileManagerListPath": "/uploads/file/", /* 指定要列出文件的目录 */
"fileManagerUrlPrefix": "", /* 文件访问路径前缀 */
"fileManagerListSize": 20, /* 每次列出文件数量 */
"fileManagerAllowFiles": \[
".png", ".jpg", ".jpeg", ".gif", ".bmp",
".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
\] /* 列出的文件类型 */
}
3.增加文件或者图片上传之后,将附件插入到数据库的功能。
dede的所有文件上传都是会将文件信息保存到数据库中的,文件的信息将和上传的用户关联起来,而ueditor只是将文件上传了事。所以要达到dede默认编辑器的效果,还需要做一些修改。当然如果你觉得文件信息完全没有必要保存,这一步可以省了。
这一步的修改主要是在相关位置增加
require_once(dirname(__file__).'/../../common.inc.php');
require_once(dirname(__file__).'/../../userlogin.class.php');
以支持获取到文章id以及用户信息。
同时增加插入到数据库的方法:
function SaveUploadInfo($info)
{
global $dsql;
$cuserLogin = new userLogin();
$url = $info\["url"\];
$filename = $info\["title"\];
$imgwidthValue = "";
$imgheightValue = "";
$imgsize = $info\["size"\];
$nowtme = time();
$mid=$cuserLogin->getUserID();
$inquery = "INSERT INTO \`jcode_uploads\`(arcid,title,url,mediatype,width,height,playtime,filesize,uptime,mid)
VALUES ('0','$filename','$url','1','','','0','$imgsize','$nowtme','$mid'); ";
$dsql->ExecuteNoneQuery($inquery);
$fid = $dsql->GetLastID();
AddMyAddon($fid, $filename);
return;
}
只需修改两个文件:
/include/ueditor1.4.3/php/action_crawler.php
修改后的代码如下,你可以复制下面的代码来替换原来的内容
<?php
/**
* 抓取远程图片
* User: Jinqn
* Date: 14-04-14
* Time: 下午19:18
*/
set_time_limit(0);
include("Uploader.class.php");
require_once(dirname(__file__).'/../../common.inc.php');
require_once(dirname(__file__).'/../../userlogin.class.php');
/* 上传配置 */
$config = array(
"pathFormat" => $CONFIG\['catcherPathFormat'\],
"maxSize" => $CONFIG\['catcherMaxSize'\],
"allowFiles" => $CONFIG\['catcherAllowFiles'\],
"oriName" => "remote.png"
);
$fieldName = $CONFIG\['catcherFieldName'\];
/* 抓取远程图片 */
$list = array();
if (isset($_POST\[$fieldName\])) {
$source = $_POST\[$fieldName\];
} else {
$source = $_GET\[$fieldName\];
}
foreach ($source as $imgUrl) {
$item = new Uploader($imgUrl, $config, "remote");
$info = $item->getFileInfo();
array_push($list, array(
"state" => $info\["state"\],
"url" => $info\["url"\],
"size" => $info\["size"\],
"title" => htmlspecialchars($info\["title"\]),
"original" => htmlspecialchars($info\["original"\]),
"source" => htmlspecialchars($imgUrl)
));
SaveUploadInfo($info);
}
/* 返回抓取数据 */
return json_encode(array(
'state'=> count($list) ? 'SUCCESS':'ERROR',
'list'=> $list
));
function SaveUploadInfo($info)
{
global $dsql;
$cuserLogin = new userLogin();
$url = $info\["url"\];
$filename = $info\["title"\];
$imgwidthValue = "";
$imgheightValue = "";
$imgsize = $info\["size"\];
$nowtme = time();
$mid=$cuserLogin->getUserID();
$inquery = "INSERT INTO \`jcode_uploads\`(arcid,title,url,mediatype,width,height,playtime,filesize,uptime,mid)
VALUES ('0','$filename','$url','1','','','0','$imgsize','$nowtme','$mid'); ";
$dsql->ExecuteNoneQuery($inquery);
$fid = $dsql->GetLastID();
AddMyAddon($fid, $filename);
return;
}
/include/ueditor1.4.3/php/action_upload.php
修改后的代码如下,你可以复制下面的代码来替换原来的内容
<?php
/**
* 上传附件和上传视频
* User: Jinqn
* Date: 14-04-09
* Time: 上午10:17
*/
include "Uploader.class.php";
require_once(dirname(__file__).'/../../common.inc.php');
require_once(dirname(__file__).'/../../userlogin.class.php');
/* 上传配置 */
$base64 = "upload";
switch (htmlspecialchars($_GET\['action'\])) {
case 'uploadimage':
$config = array(
"pathFormat" => $CONFIG\['imagePathFormat'\],
"maxSize" => $CONFIG\['imageMaxSize'\],
"allowFiles" => $CONFIG\['imageAllowFiles'\]
);
$fieldName = $CONFIG\['imageFieldName'\];
break;
case 'uploadscrawl':
$config = array(
"pathFormat" => $CONFIG\['scrawlPathFormat'\],
"maxSize" => $CONFIG\['scrawlMaxSize'\],
"allowFiles" => $CONFIG\['scrawlAllowFiles'\],
"oriName" => "scrawl.png"
);
$fieldName = $CONFIG\['scrawlFieldName'\];
$base64 = "base64";
break;
case 'uploadvideo':
$config = array(
"pathFormat" => $CONFIG\['videoPathFormat'\],
"maxSize" => $CONFIG\['videoMaxSize'\],
"allowFiles" => $CONFIG\['videoAllowFiles'\]
);
$fieldName = $CONFIG\['videoFieldName'\];
break;
case 'uploadfile':
default:
$config = array(
"pathFormat" => $CONFIG\['filePathFormat'\],
"maxSize" => $CONFIG\['fileMaxSize'\],
"allowFiles" => $CONFIG\['fileAllowFiles'\]
);
$fieldName = $CONFIG\['fileFieldName'\];
break;
}
/* 生成上传实例对象并完成上传 */
$up = new Uploader($fieldName, $config, $base64);
$info = $up->getFileInfo();
//$info\["url"\] = str_replace("../","",$info\[ "url" \]);
/**
* 向浏览器返回数据json数据
* {
* 'url' :'a.jpg', //保存后的文件路径
* 'title' :'hello', //文件描述,对图片来说在前端会添加到title属性上
* 'original' :'b.jpg', //原始文件名
* 'state' :'SUCCESS' //上传状态,成功时返回SUCCESS,其他任何值将原样返回至图片上传框中
* }
*/
SaveUploadInfo($info);
/**
* 得到上传文件所对应的各个参数,数组结构
* array(
* "state" => "", //上传状态,上传成功时必须返回"SUCCESS"
* "url" => "", //返回的地址
* "title" => "", //新文件名
* "original" => "", //原始文件名
* "type" => "" //文件类型
* "size" => "", //文件大小
* )
*/
/* 返回数据 */
return json_encode($up->getFileInfo());
function SaveUploadInfo($info)
{
global $dsql;
$cuserLogin = new userLogin();
$url = $info\["url"\];
$filename = $info\["title"\];
$imgwidthValue = "";
$imgheightValue = "";
$imgsize = $info\["size"\];
$nowtme = time();
$mid=$cuserLogin->getUserID();
$inquery = "INSERT INTO \`jcode_uploads\`(arcid,title,url,mediatype,width,height,playtime,filesize,uptime,mid)
VALUES ('0','$filename','$url','1','','','0','$imgsize','$nowtme','$mid'); ";
$dsql->ExecuteNoneQuery($inquery);
$fid = $dsql->GetLastID();
AddMyAddon($fid, $filename);
}
修改系统设置
在系统的核心设置中将编辑器修改为ueditor1.4.3。