如何将文本编辑器嵌入框架--以Umeditor&CodeIgniter框架为例

简介: 转:http://blog.csdn.net/u013332865/article/details/52066211最近接到一个给某私立贵族(小,初,高 12年只是学费近200W)学校做一个网站,时间紧迫,本来打算用wordpress,但是要求页面要重新设计,而我们的前端开发没有WP主题开发的经验,无疑需要额外的学习成本(主要是时间来不及),所以提出自己做一个CMS的系统。

转:http://blog.csdn.net/u013332865/article/details/52066211

最近接到一个给某私立贵族(小,初,高 12年只是学费近200W)学校做一个网站,时间紧迫,本来打算用wordpress,但是要求页面要重新设计,而我们的前端开发没有WP主题开发的经验,无疑需要额外的学习成本(主要是时间来不及),所以提出自己做一个CMS的系统。但是文章编辑这块需要文本编辑器的基本功能,那就只能用富文本编辑器了。再加上本菜鸡喜欢用CI框架,所以需要把富文本编辑器和框架相结合,以下内容以此背景展开。


事前准备:
    环境:mac系统+Apache+mysql(没用到)+php(废话)
    富文本编辑器:umeditor (ueditor的简化版,需要用到的文本编辑器的道友可以试一下,很推荐)
    GitHub地址:https://github.com/fex-team/umeditor

    codeigniter框架(简称CI框框)
    官网地址:http://codeigniter.org.cn/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

先来一张umeditor的文件结构吧: 
这里写图片描述 
图一


将文本编辑器嵌入框架,其本质就是在框架内的view中引入编辑器的样式和JS,在controller中引入编辑器的相关PHP类。


引入JS&CSS: 
这里写图片描述 
图二 
CSS: 
图二中public\umeditor\umeditor.css&umeditor.min.css即图一中umeditor\themes\default\css中的两个文件。前者为未压缩,后者未压缩版。 
public\umeditor\formbtn.css即图二umeditor\index.html中文件里面的一些样式。 
图二public\images文件夹即图一umeditor\themes\default\images 
图二public\js\umeditor\dialogs&third-party即图一umeditor\dialogs&third-party 
图二public\js\umeditor\umeditor.js&umeditor.config.js即图一umeditor\umeditor.js&umeditor.config.js(umeditor.js与umeditor.min.js 这里不再赘述) 
图二public\js\zh-cs.js即图一umeditor\lang\zh-cn\zh-cn.js(中文的语言包,或者应该说是提示信息中文包) 
jQuery.min.js 这里用的是v2.2.3 
下面是在view中的引入:


    <link href="<?php echo base_url('/public/css/umeditor/umeditor.css'); ?>" type="text/css" rel="stylesheet"> <script type="text/javascript" src="<?php echo base_url('/public/js/jquery.min.js'); ?>"></script> <script type="text/javascript" charset="utf-8" src="<?php echo base_url('/public/js/umeditor/umeditor.js'); ?>"></script> <script type="text/javascript" charset="utf-8" src="<?php echo base_url('/public/js/umeditor/umeditor.config.js'); ?>"></script> <script type="text/javascript" src="<?php echo base_url('/public/js/umeditor/zh-cn.js'); ?>"></script> <link rel="stylesheet" href="<?php echo base_url('/public/css/umeditor/formbtn.css'); ?>">
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
引入相关PHP类:
在CI框架下的application\libraries中新建一个文件'Umupload.php'(我个人只是想用上传,所以变这么命名)
然后将图一中umeditor\php\Upload.class.php中的所以代码直接Copy至上一步新建的文件中。

处理上传:
这里本菜鸡直接在CI的默认控制器 welcome中写了两个function 分别加载编辑器视图和处理上传,如下:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
<?php
defined('BASEPATH') OR exit('No direct script access allowed'); class Welcome extends CI_Controller { public function index() { $this->load->view('umeditor.html'); } public function umupload(){ error_reporting( E_ERROR | E_WARNING ); //上传配置 $config = array( "savePath" => "upload/" , //存储文件夹 (感觉没啥用) "maxSize" => 1000 , "allowFiles" => array( ".gif" , ".png" , ".jpg" , ".jpeg" , ".bmp" ) ); //上传文件目录 $Path = "upload/"; //背景保存在临时目录中 $config[ "savePath" ] = $Path; $this->load->library('Umupload',array('fileField'=>'upfile', 'config' => $config)); $type = $_REQUEST['type']; $callback=$_GET['callback']; $info = $this->umupload->getFileInfo(); /** * 返回数据 */ if($callback) { echo '<script>'.$callback.'('.json_encode($info).')</script>'; } else { echo json_encode($info); } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

其中public function umupload()的函数体就是图一umeditor\php\imageUp.php中的内容,并且做了相关修改。

至此,编辑器已经全部嵌入框架,但是还需修改一些代码片段才可以正式使用。


后期加工,以下修改均指CI框架中的修改:
修改JS:CI\public\js\umeditor.config.js 第139行附近修改为:
  • 1
  • 2
  • 3

        //图片上传配置区
        ,imageUrl:URL+"../../../index.php/welcome/umupload"             //图片上传提交地址
        ,imagePath:URL + "../../../"  //图片修正地址,引用了fixedImagePath,如有特殊需求,可自行配置 ,imageFieldName:"upfile"  //图片数据的key,若此处修改,需要在后台对应文件修改对应参数
  • 1
  • 2
  • 3
  • 4
  • 5
    这里主要是修改路径,让JS可以找到控制器。出于仓促这里使用相对路径。

修改PHP:
    据上文所述,在welcome的控制器中 public function umupload()的函数体是copy而来,所以要修改一部分使之可以在CI中'跑'起来。修改之后的代码如上文所示,具体修改为:
    删除最开始的两行:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

    header("Content-Type:text/html;charset=utf-8");
    error_reporting( E_ERROR | E_WARNING );
  • 1
  • 2
  • 3

将原编辑器中的 17行


    $up = new Uploader( "upfile" , $config );
  • 1
  • 2

修改为:

$this->load->library('Umupload',array('fileField'=>'upfile', 'config' => $config));
  • 1

因为此处通过加载library的方式引入编辑器的相关PHP类。并且library的构造函数只能传一个参数,因此做此修改。

第21行附近的

$info = $up->getFileInfo();
  • 1

修改为:

$info = $this->umupload->getFileInfo(); 
  • 1
  • 2

这里即调用library引入类的方法。

修改library文件: 
通上文所述,library的构造函数只能传一个参数所以作如下修改: 
第43行附近修改为:

    public function __construct( $param) { $this->fileField = $param['fileField']; $this->config = $param['config']; $this->stateInfo = $this->stateMap[ 0 ]; $this->upFile( false ); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

至此,umeditor文本编辑器已经嵌入CI框架。 
本人测试试用成功。 
umeditor的使用方法就不再赘述了。

更新于2016.8.30 融合bug(与bootstrap的CSS冲突)

如果使用bootstrap前端框架。那么umeditor编辑器中的图片在调整大小的时候会有一些”失灵”的BUG。 
主要是因为,编辑器的样式与bootstrap.css 的box-sizing设置有冲突

* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box; box-sizing: border-box; }
  • 1
  • 2
  • 3
  • 4
  • 5

解决方案: 
可以在用到编辑器的页面,重新设置包含编辑器的元素的该项属性

.edui-container *{
    -webkit-box-sizing: initial; -moz-box-sizing: initial; box-sizing: initial; } /* .edui-container 为包含编辑器的元素*/
如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
相关文章
|
7月前
|
JSON 前端开发 数据可视化
AMIS【部署 01】amis前端低代码框架可视化编辑器amis-editor本地部署流程
AMIS【部署 01】amis前端低代码框架可视化编辑器amis-editor本地部署流程
1055 0
|
4月前
|
缓存 前端开发
ProFlow 流程编辑器框架问题之创建一个自定义节点如何解决
ProFlow 流程编辑器框架问题之创建一个自定义节点如何解决
46 1
|
4月前
|
小程序 API 容器
ProFlow 流程编辑器框架问题之查看ProFlow的开源地址和官网链接如何解决
ProFlow 流程编辑器框架问题之查看ProFlow的开源地址和官网链接如何解决
128 0
|
4月前
|
前端开发 算法
ProFlow 流程编辑器框架问题之FlowView 组件中添加节点和边缘数据如何解决
ProFlow 流程编辑器框架问题之FlowView 组件中添加节点和边缘数据如何解决
57 0
|
6月前
|
缓存 前端开发 算法
ProFlow 流程编辑器框架 1.0 发布
ProFlow 流程编辑器框架 1.0 发布
410 0
|
7月前
|
前端开发 JavaScript 搜索推荐
react-app框架——使用monaco editor实现online编辑html代码编辑器
react-app框架——使用monaco editor实现online编辑html代码编辑器
309 3
|
7月前
|
传感器 移动开发 Go
如何像人类一样写HTML之代码编辑器的选择与基础框架
如何像人类一样写HTML之代码编辑器的选择与基础框架
|
7月前
|
存储 搜索推荐 前端开发
SpringBoot框架+原生HTML云端SaaS服务方式的电子病历编辑器源码
一体化电子病历系统基于云端SaaS服务的方式,采用B/S(Browser/Server)架构提供,覆盖了医疗机构电子病历模板制作到管理使用的整个流程。除实现在线制作内容丰富、图文并茂、功能完善的电子病历模板外,还可按照医疗机构的特色,根据不同业务的需求,使用该系统定制个性化、实用化、特色化电子病历模板。 该系统能对电子病历模板进行统一集中管理,通用的电子病历模板能直接提供给不同的医疗机构直接使用,避免重复制作;提供了功能齐备的控件元素,实现电子病历在业务使用中数据的自动获取功能,简化了人工的大量填报。
122 0
|
前端开发 JavaScript 搜索推荐
JAVA带编辑器医院电子病历管理系统源码 springboot框架
Java电子病历系统技术说明 1、技术选型 :本电子病历系统采用前后端分离模式开发和部署。 2、前端技术:原生HTML、JS、CSS,Jquery、BootStrap、layui、Swf插件、Clipboard剪切板、 Echarts、PagedJS打印插件、Prince打印插件、Wkhtmltopdf打印插件等。 3.后端技术:SpringBoot框架、Mybatis-Plus、WebSocket、Stomp、Vintage-Engine页面解析模板引擎、 Thymeleaf页面解析模板引擎、Fileupload文件上传组件等。 4、数据库:MySQL数据库
393 0
JAVA带编辑器医院电子病历管理系统源码 springboot框架
|
JavaScript 前端开发 API
如何将c#在线编辑器嵌入自己项目
如何将c#在线编辑器嵌入自己项目
92 0