在 ThinkPHP 3.2.3 中集成百度编辑器最新版 Ueditor 1.4.3.1,同时将编辑器自带的上传类替换成 ThinkPHP 3.2.3 中的上传类。

① 下载编辑器(下载地址:http://ueditor.baidu.com/website/download.html),解压后放入项目根目录的 Data 目录并且将解压出来的目录重命名为 ueditor。

项目中的控制器 ./Application/Admin/Controller/BlogController.class.php 和 视图 ./Application/Admin/View/Blog_add_blog.html 分别是添加博客文章的控制器和视图。

② 在 Blog_add_blog.html 中引入编辑器的配置文件 ./Data/ueditor/ueditor.config.js 和 编辑器的类库文件 ./Data/ueditor/ueditor.all.min.js

③ 在 Blog_add_blog.html 中,用于填写文章的文本域:

  1. <textarea name="content" id="content"></textarea>

因此需要在视图文件的 js 中进行设置,根据默认文本域的 id 将文本域替换成百度编辑器:

  1. <script>
  2. window.UEDITOR_HOME_URL = '__ROOT__/Data/ueditor/';
  3. window.onload = function() {
  4. UE.getEditor('content');
  5. }
  6. </script>

同时可以对编辑器的其他配置进行设置,例如:

  1. window.onload = function() {
  2. window.UEDITOR_CONFIG.initialFrameWidth = 750; //初始化编辑器宽度
  3. window.UEDITOR_CONFIG.initialFrameHeight = 200; //初始化编辑器高度
  4. UE.getEditor('content');
  5. }

④ 根据浏览器的开发者工具可以看到在上传图片时请求的地址是 ./Data/ueditor/php/controller.php,参数 action = uploadimage

controller.php 是服务器统一请求接口路径,在 line 9 ~ line 23 中如果请求的参数 action = uploadimage 时,则

  1. $result = include("action_upload.php");

在 action_upload.php 中包含了上传的配置选项,并且包含了 Uploader.class.php 文件

Uploader.class.php 文件是 ueditor 的上传类文件。

因此如果需要自定义上传类,只需要自定义请求地址即可(把 controller.php 替换成自己的地址),根据文档中 http://fex.baidu.com/ueditor/#qa-customurl 的说明,由于所有ueditor请求都通过editor对象的getActionUrl方法获取请求地址,可以直接通过复写这个方法实现在视图文件,只需要 ./Application/Admin/View/Blog_add_blog.html 的 js 中添加上:

  1. UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;
  2. UE.Editor.prototype.getActionUrl = function(action) {
  3. if (action == 'uploadimage') { //上传图片
  4. return "{:U('Admin/Blog/upload',array('action'=>'uploadimage'),'')}";
  5. } else if(action == 'config') { //加载配置
  6. return this._bkGetActionUrl.call(this, action);
  7. }
  8. }

视图文件完整的 js:

  1. <!-- ueditor start-->
  2. <script>
  3. window.UEDITOR_HOME_URL = '__ROOT__/Data/ueditor/';
  4. window.onload = function() {
  5. window.UEDITOR_CONFIG.initialFrameWidth = 750; //初始化编辑器宽度
  6. window.UEDITOR_CONFIG.initialFrameHeight = 200; //初始化编辑器高度
  7. //自定义请求地址
  8. UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;
  9. UE.Editor.prototype.getActionUrl = function(action) {
  10. if (action == 'uploadimage') { //上传图片
  11. return "{:U('Admin/Blog/upload',array('action'=>'uploadimage'),'')}";
  12. } else if(action == 'config') { //加载配置
  13. return this._bkGetActionUrl.call(this, action);
  14. }
  15. }
  16. //自定义请求地址结束
  17. UE.getEditor('content');
  18. }
  19. </script>
  20. <script src="__ROOT__/Data/ueditor/ueditor.config.js"></script>
  21. <script src="__ROOT__/Data/ueditor/ueditor.all.min.js"></script>
  22. <!--ueditor end-->

⑤ 在控制器的 upload 方法中,只需要对 ./Data/ueditor/controller.php 中的方法进行修改:

  1. <?php
  2. namespace Admin\Controller;
  3. use Think\Upload;
  4.  
  5. class BlogController extends CommonController{
  6. //上传图片
  7. public function upload() {
  8. date_default_timezone_set("Asia/chongqing");
  9. error_reporting(E_ERROR);
  10. header("Content-Type: text/html; charset=utf-8");
  11.  
  12. $CONFIG = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents("config.json")), true);
  13. $action = $_GET['action'];
  14. if('uploadimage' == $action) { //上传图片
  15. //处理图片上传开始
  16. //实例化上传类
  17. $upload = new Upload();
  18. //配置
  19. $upload->subName = array('date', 'Ym');//子目录创建方式
  20. //上传
  21. $info = $upload->upload();
  22. //p($info);//上传信息
  23. if($info) {
  24. /**
  25. * 得到上传文件所对应的各个参数,数组结构
  26. * array(
  27. * "state" => "", //上传状态,上传成功时必须返回"SUCCESS"
  28. * "url" => "", //返回的地址
  29. * "title" => "", //新文件名
  30. * "original" => "", //原始文件名
  31. * "type" => "" //文件类型
  32. * "size" => "", //文件大小
  33. * )
  34. */
  35. $arr = array(
  36. 'state'=>'SUCCESS',
  37. 'url'=>'http://'.$_SERVER['SERVER_NAME'].'/Uploads/'.$info['upfile']['savepath'].$info['upfile']['savename'],
  38. 'title'=>$info['upfile']['savename'],
  39. 'original'=>$info['upfile']['name'],
  40. 'type'=>$info['upfile']['ext'],
  41. 'size'=>$info['upfile']['size']
  42. );
  43. //print_r($arr);
  44. /* 返回数据 */
  45. $result = json_encode($arr);
  46. } else {
  47. $arr = array('state'=>$upload->getError());
  48. }
  49. //图片上传结束
  50. } elseif('config' == $action) { //加载配置
  51. $result = json_encode($CONFIG);
  52. }
  53. /* 输出结果 */
  54. if (isset($_GET["callback"])) {
  55. if (preg_match("/^[\w_]+$/", $_GET["callback"])) {
  56. echo htmlspecialchars($_GET["callback"]) . '(' . $result . ')';
  57. } else {
  58. echo json_encode(array(
  59. 'state'=> 'callback参数不合法'
  60. ));
  61. }
  62. } else {
  63. echo $result;
  64. }
  65. }
  66. }

Ueditor 1.4.3.1 使用 ThinkPHP 3.2.3 的上传类进行图片上传的更多相关文章

  1. ueditor 百度编辑器 自定义图片上传路径和格式化上传文件名

    今天项目中需要自定义图片上传的保存路径,并且不需要按照日期自动创建存储文件夹和文件名,我的ueditor版本是1.3.6.下面记录一下我配置成功的方法,如果有什么不对的地方欢迎指出,共同学习: 1:我 ...

  2. ThinkPHP示例:图片上传

    ThinkPHP示例之图片上传,包括图片上传.数据库保存.缩略图生成以及图片水印功能演示.首先需要下载框架核心,然后把示例解压到Web根目录下面,并修改入口文件中的框架入口文件的位置.导入示例目录下面 ...

  3. 百度编辑器前后端二开图片上传Js Thinkphp tp5 ueditor

    百度编辑器图片上传Jsueditor.all.min.js 下载链接 链接:https://pan.baidu.com/s/1VNgw9ELgRRHKeCQheFkQTw 提取码:fnfi 使用方法: ...

  4. uEditor独立图片上传

    项目中.上传图片,非常希望有一款比较兼容的查件. 网上找了一些,图片上传立刻显示的js代码,还有uploadify.都会碰到这样那样的不兼容和其它头疼的问题. 后来想,干脆就用php的上传类最干脆.但 ...

  5. ThinkPHP3.1.3 整合 UEditor百度编辑器 图片上传

    第一步.前端模板实例化百度编辑器 <js file='__ROOT__/Data/UEditor/ueditor.config.js' /> <js file='__ROOT__/D ...

  6. 对百度的UEditor多图片上传的一些补充

    我已经写了一篇文章关于百度的UEditor提取多图片上传模块.如果还没有看过,请点击以下链接查看 http://www.cnblogs.com/luke1006/p/3719029.html 出差了两 ...

  7. THINKPHP源码学习--------文件上传类

    TP图片上传类的理解 在做自己项目上传图片的时候一直都有用到TP的上传图片类,所以要进入源码探索一下. 文件目录:./THinkPHP/Library/Think/Upload.class.php n ...

  8. 百度UEditor在线编辑器的配置和图片上传

    前言 最近在项目中使用了百度UEditor富文本编辑器,配置UEditor过程中遇到了几个问题,在此记录一下解决方案和使用方法,避免以后使用UEditor出现类似的错误. 基本配置 一.下载UEdit ...

  9. 关于editor网页编辑器ueditor.config.js 配置图片上传

    最近公司项目在做一个门户网站,其中新闻和简介等部分使用到了ueditor编辑器,但是上级明确指示需要图片上传这个功能,这时却发现图片上传功能不能正常使用,上传时一直报错,网上收了好几个处理办法,都说的 ...

随机推荐

  1. 内核终端判断,微信?QQ?ipad?IE?移动?Google?opera……

    $(document).ready(function(){ //判断访问终端 var browser={ versions:function(){ var u = navigator.userAgen ...

  2. Trie + DP LA 3942 Remember the Word

    题目传送门 题意:(训练指南P209) 问长字符串S能由短单词组成的方案数有多少个 分析:书上的做法.递推法,从后往前,保存后缀S[i, len-1]的方案数,那么dp[i] = sum (dp[i+ ...

  3. Android应用帧率--FPS测试

    Android应用帧率FPS是衡量应用流畅度的一个非常重要的指标,可以根据FPS对应用做一些优化,那么在开发过程中如何来测试我们的应用的FPS呢? 准备工具:Eclipse + Android测试终端 ...

  4. three.js 显示一条线

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. BZOJ 2427 & 分块裸题

    题意: 求区间内的众数,强制在线. SOL: 推荐一个大神犇的blog,讲的还是很好的(主要我喜欢他的代码风格(逃:http://www.cnblogs.com/JoeFan/p/4248767.ht ...

  6. BZOJ1012[JSOI2008]最大数maxnumber 题解

    题目大意: 维护一个数列,有两种操作:1. 查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2.插入操作:将n加上t,其中t是最近一次查询操作的答案(如果还未执行 ...

  7. codeforces round #234B(DIV2) A Inna and Choose Options

    #include <iostream> #include <string> #include <vector> using namespace std; ; ,,, ...

  8. jQuery 源码理解的基础

    /** * Created by cyk on 14-4-17. */function Person() { var temp = this; //this指向Person console.log(& ...

  9. CF 7C. Line(扩展欧几里德)

    题目链接 AC了.经典问题,a*x+b*y+c = 0整数点,有些忘记了扩展欧几里德,复习一下. #include <cstdio> #include <iostream> # ...

  10. linux下搭建svn代码库

    1.安装svn客户端 2.创建svn代码库 1.安装svn客户端 1.1.使用命令安装 1)CentOS $ yum install subversion 2)ubuntu sudo apt-get ...