热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

百度编辑器ueditor使用总结——基于Yii框架整合ueditor示例

百度编辑器ueditor使用总结——基于Yii框架整合ueditor示例

我的定制版界面预览:

百度编辑器定制版界面

官网地址:http://ueditor.baidu.com/website/index.html

Ueditor由百度开发,传说中的百度更懂中文嘛,不像KindEditor有时会显示乱码。Ueditor提供中文“utf-8”和“gbk”版本的下载。而且分为完整版和定制版。完整版没什么可说的,下面说下定制版:

定制版就是可以选择自己需要的功能,然后根据用户所选组件生成下载包。地址(http://ueditor.baidu.com/website/ipanel/panel.html)。定制的内容包括组件,编辑器背景颜色或图片,编辑器高度和宽度等;

值得一提的是,Ueditor提供了功能说明文档和使用说明文档。可以让开发者快速的清楚他能实现的功能,并节约阅读原JS代码的时间,熟练的使用Ueditor。文档链接(http://ueditor.baidu.com/website/document.html),附使用说明文档(摘自Ueditor官网):

前后端数据交互

一、富文本内容交互

1编辑器内容初始化(即往编辑器中设置富文本)

场景一:写新文章,编辑器中预置提示、问候等内容。

在editor_config.js文件中找到initialContent参数,设置其值为需要的提示或者问候语即可,如initialContent:’欢迎使用UEditor!’。

场景二:编辑旧文章,从数据库中取出富文本放置到编辑器中。

显然,编辑文章时需要从后台数据库中取出大段富文本,如果仍然采用场景一中的方式去设置初始值的话,必然会带来诸如引号匹配被截断等问题,因此需要采用另外一种方式去设置,如下代码所示:


此处采用了script标签作为编辑器容器对象,并设置了其类型是纯文本,从而在避免了标签内部JS代码执行的同时解决了部分同学在使用传统的textarea标签作为容器所带来的一次额外转码问题。 2提交编辑器内容至后端 场景一:在编辑器所在的Form中存在提交按钮,提交动作由点击此按钮完成。 该场景适用于最普通的场合,没有太大问题需要注意,仅三点说明: 1)?默认情况下提交到后台的表单名称是?“editorValue”,在editor_config.js中可以配置,参数名为textarea。 2)?可以在容器标签(即script标签)上设置name属性,以覆盖editor_config.js中的默认配置。实例代码如下,此处的myContent将成为新的提交表单名称:



3)后端接收程序可以通过如下几种方式来获取编辑器中的富文本内容。

//PHP获取:
$_POST["myContent"]

//JSP获取:
request.getParameter("myContent");

//ASP获取:
request("myContent");

//NET获取:
context.Request.Form["myContent"];

场景二:编辑器所在的Form中不存在提交按钮,提交动作由外部事件触发。

该场景适用于站点前端交互较多的场合,需要注意的事项主要是在触发form提交动作之前执行编辑器内容同步操作。一般的代码模式如下所示:

//满足提交条件时同步内容并提交,此处editor为编辑器实例
if(editor.hasContent()){ //此处以非空为例
editor.sync(); //同步内容
someForm.submit(); //提交Form
}

此处editor是编辑器实例对象。

场景三:编辑器不在任何Form中,提交动作由外部事件触发。

该场景使用不多,但特殊时候可能需要。UEditor也提供了对应的处理方案,基本逻辑跟场景二一样,只是在执行同步操作的时候需要传入提交form的id,如editor.sync(myFormID)即可。其他同场景二。

二、图片上传交互

上传图片及图片管理界面:

百度编辑器上传图片界面

1传统图片上传

传统图片上传涉及到的前后端交互主要涉及“上传提交路径”以及“图片保存路径”两个参数,后台保存路径以任何形式(绝对或者相对)、在任何页面展示跟前台无关。

2Flash图片上传

Flahs图片上传和传统图片上传存在一个很大的区别:它需要服务器端实时返回“图片保存路径”用于在前台的即时展示。具体到编辑器,就是需要将返回的路径插入到编辑器中。由此会引出除传统图片上传中提到的两个参数之外的第三个参数:“前后端修正路径”。如果后台返回的保存路径是绝对路径(指以http开头的路径,以根目录开始的路径也可勉强归入其中),那么前台无须做任何修正,否则用户必须十分清楚自己当前的目录结构并据此修正这个前后端相对路径之间的差异。因此,UEditor极力推荐由服务器端返回以根目录开始的相对路径。

3UEditor中的上传实践及注意事项

在UEditor中,“上传提交路径”和“前后端修正路径”的配置位于editor_config.js中。其中,imageUrl参数对应着“上传提交路径”,imagePath参数对应着“前后端修正路径”。而“图片保存路径”则需要在server/upload/php目录下的imageUp文件中配置。

路径配置完成之后,还需要配置imageFieldName参数作为文件表单的表单名,后台可以据此获取文件句柄。该参数同样位于editor_config.js中。

//图片上传提交地址
imageUrl:URL+"server/upload/php/imageUp.php",

//图片修正地址,引用了fixedImagePath,如有特殊需求,可自行配置
imagePath:fixedImagePath,

//图片描述的key
imageFieldName:"upFile",

//等比压缩的基准,确定maxImageSideLength参数的参照对象.
//0为按照最长边,1为按照宽度,2为按照高度
compressSide:0,

//上传图片最大允许的边长,超过会自动等比缩放,不缩放就设置一个比较大的值
//更多设置在image.html中
maxImageSideLength:900

完成上述配置之后,理论上后台应该可以接收到前台上传的图片文件了。在正确保存之后,传统图片上传至此就结束了。但是,在使用Flash上传的编辑器中,流程还远未结束。

首先,后台需要计算得出图片文件存放的地址字符串。该字符串UEditor极力推荐使用从网站根目录开始算起,一直到图片名结束为止。如果不从网站根目录开始算起,后面需要考虑“前后端修正地址”参数。

其次,后台返回一个json格式的字符串,格式具体要求如下:

{ "url":"图片地址", "title":"图片描述", "state":"上传状态" }

其中,url对应计算出的图片保存地址——再强调一遍,尽量构造出从网站根目录开始的地址字符串;title对应flash中的描述字段,在图片上将会被设置到title属性中;state对应服务器端返回的图片上传状态字符:除了上传成功返回“SUCCESS”之外,其他任何值都将被直接显示在返回的图片描述字段内。

最后,UEditor会在返回的url地址前面增加“前后端修整路径”这个参数值作为最后插入编辑器中的图片地址。因此,如果服务器端返回的是从根目录开始的图片路径或者http开头的绝对路径,“前后端修正路径”必须留空。

举例来讲,如果服务器返回的路径是“/myProject/uploads/sun.jpg”,那么插入到编辑器中的路径会是“前后端修正路径?+??/myProject/uploads/sun.jpg”。

三、Word图片转存交互

1图片转存原理

所谓word图片转存,是指UEditor为了解决用户从word中复制了一篇图文混排的文章粘贴到编辑器之后,word文章中的图片数据无法显示在编辑器中,也无法提交到服务器上的问题而开发的一个操作简便的图片转存方案。

该功能的基本操作步骤:复制word文档->粘贴到编辑器->编辑器会将所有图片转换成一个占位图,同时在工具栏中高亮转存按钮->点击转存按钮弹出图片上传框->点击复制按钮复制图片目录地址->点击“添加照片”按钮,在弹出的选择框中粘贴刚复制的图片目录地址->点击打开按钮,选择目录下的所有图片文件,在此点击打开->执行图片上传->上传成功确认插入,UEditor将自动完成对应占位图的替换过程。

2配置要点及注意事项

word图片转存跟普通图片上传的配置基本一样,所不同的仅仅是操作上的差异:前者需要首先获取临时图片文件存在的目录,后者直接选择自己指定的文件目录。PS:在部分操作系统的部分版本word中发现单张word图片会生成两张临时图片,且格式不一,清晰度各异,目前暂时未发现改进方法。

四、远程图片抓取交互

1远程抓取原理

图片远程抓取是指在插入本地域名之外的图片链接地址时,由服务器将这些外部图片抓取到本地服务器保存的一个功能。实现原理为在编辑器中向服务器发送包含所有外域图片地址的ajax请求,然后由服务器在后端抓取保存后返回图片地址给编辑器,再由编辑器完成外域地址和本地地址的替换工作。

//是否开启远程图片抓取
catchRemoteImageEnable:true,

//处理远程图片抓取的地址
catcherUrl:URL +"server/submit/php/getRemoteImage.php",

//提交到后台远程图片uri合集的表单名
catchFieldName:"upFile",

//图片修正地址,同imagePath
catcherPath:fixedImagePath,

//本地顶级域名,当开启远程图片抓取时,除此之外的所有其它域名下的
//图片都将被抓取到本地
localDomain:["baidu.com","10.81.2.114"],

2注意事项

远程抓取功能是否开启可在edicot_config.js中通过配置catchRemoteImageEnable参数实现。与这个功能相关的配置还包括了远程抓取的处理程序地址,表单域名称,本地域和“前后端修正地址”。远程抓取处理程序实现了依据前端提交的地址列表(使用ue_separate_ue标示符进行分隔的字符串)进行图片抓取,然后返回地址列表给客户端的功能。

前后台交互数据格式样例:(URL1,URL2,URL3,URL4)

URL1ue_separate_ueURL2ue_separate_ueURL3ue_separate_ueURL4

五、图片在线管理交互

1、图片在线管理介绍

图片在线管理是指通过读取服务器端的文件目录并将其展示到编辑器中的进行额外一些操作的功能。处于安全考虑,目前UEditor仅实现了图片二次插入操作,其他诸如删除、移动等操作将会在后续二次开发教程中陆续放出。

//图片在线管理的处理地址
imageManagerUrl:URL + "server/submit/php/imageManager.php",

//图片修正地址,同imagePath
imageManagerPath:fixedImagePath

2注意事项

图片在线管理需要配置的参数跟远程图片抓取一致,两者不同的地方是图片在线管理中的图片数据是由服务器端指定某个目录,然后遍历其下的所有图片文件得到,然后将地址返回给编辑器,而远程图片抓取则是由编辑器提交图片地址,经过服务器端的抓取处理后返回新的地址给编辑器。两者的初始触发都需要ajax的介入。

六、屏幕截图交互

1屏幕截图介绍

使用了ActiveX控件,目前只支持IE浏览器。

2注意事项

需要配置的参数除了跟图片上传一样的内容之外,还多出了服务器地址和端口的配置。具体使用时请根据自身服务器的特点做出适应修改。

//屏幕截图的server端文件所在的网站地址或者ip,请不要加http://
snapscreenHost: '127.0.0.1',

//屏幕截图的server端保存程序,UEditor的范例代码为“URL
snapscreenServerUrl: URL +"server/upload/php/snapImgUp.php", +"server/upload/php/snapImgUp.php"”

//屏幕截图的server端端口
snapscreenServerPort: 80,

//截图的图片默认的排版方式
snapscreenImgAlign: 'center',

//截图显示修正地址
snapscreenPath: fixedImagePath,

七、附件上传交互

1附件上传注意事项

附件上传的基本配置跟图片类似。另外,由于附件上传采用了相当成熟的swfupload开源框架,因此大部分的文档和资料尽可参考swfupload的官网教程。官网地址:http://www.swfupload.org

一、官网上下载完整源码包,解压到任意目录,解压后的源码目录结构如下所示:

Ueditor组织结构

_examples:编辑器完整版的示例页面

_demos:编辑器的各种使用案例

dialogs:弹出对话框对应的资源和JS文件

themes:样式图片和样式文件

server:涉及到服务器端操作的PHP、JSP等文件

third-party:第三方插件

editor_all.js:_src目录下所有文件的打包文件

editor_all_min.js:editor_all.js文件的压缩版,建议在正式部署时才采用

editor_config.js:编辑器的配置文件,建议和编辑器实例化页面置于同一目录
二、部署UEditor到实际项目(基于Yii框架整合UEditor)中的步骤:

第一步:在项目的任一文件夹中建立一个用于存放UEditor相关资源和文件的目录,此处在项目根目录下建立,起名为ueditor。

第二步:拷贝源码包中的dialogs、themes、third-party、editor_all.js和editor_config.js到ueditor文夹中。其中,除了ueditor目录之外的其余文件均为具体项目文件,此处所列仅供示例。

第三步:为简单起见,此处将以根目录下的index.php页面作为编辑器的实例化页面,用来展示UEditor的完整版效果。在index.php文件中,首先导入编辑器需要的三个入口文件,示例代码如下:

Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/ueditor/ueditor.config.js');
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/ueditor/ueditor.all.min.js');

第四步:然后在index.php文件中创建编辑器实例及其DOM容器。具体代码示例如下:


textArea($model,'content'); ?> //我是基于Yii框架整合的百度编辑器

最后一步:?在/UETest/ueditor/?editor_config.js中查找URL变量配置编辑器在你项目中的路径。

//强烈推荐以这种方式进行绝对路径配置
URL= window.UEDITOR_HOME_URL||"/UETest/ueditor/";

至此,一个完整的编辑器实例就已经部署到咱们的项目中了!在浏览器中输入http://localhost/UETest?运行下试试UE强大的功能吧!

三、注意事项

1.在引用editor_config.js时,最好先于editor_all.js加载,否则特定情况下可能会出现报错。

2.若希望给编辑器赋初值,请将上面描述index.php的div换成初始内容

3.?需要注意的是编辑器资源文件根路径。它所表示的含义是:以编辑器实例化页面为当前路径,指向编辑器资源文件(即dialog等文件夹)的路径。鉴于很多同学在使用编辑器的时候出现的种种路径问题,此处强烈建议大家使用"相对于网站根目录的相对路径"进行配置。"相对于网站根目录的相对路径"也就是以斜杠开头的形如"/UETest/ueditor/"这样的路径。

此外如果你使用的是相对路径,例如"ueditor/"(相对于图表1路径结构)

如果站点中有多个不在同一层级的页面需要实例化编辑器,且引用了同一UEditor的时候,可能不适用于每个页面的编辑器。因此,UEditor提供了针对不同页面的编辑器可单独配置的根路径,具体来说,在需要实例化编辑器的页面最顶部写上如下代码即可。

当然,需要令此处的URL等于对应的配置。window.UEDITOR_HOME_URL?="/xxxx/xxxx/";

4.初次使用如果出现上传图片保存错误,则有可能是因为没有设置好上传路径及权限的原因,处理图片上传的类为ueditor/php/imageUp.php文件,可以看到上传路径为当前目录下的upload文件夹,并且在该文件中调用了Upload.class.php,其中定义了upload文件夹的属性为777,所以如果出现保存出错的报错,则可以在当前目录下创建upload文件夹并且设置其属性为777,当然你也可以将该文件夹定义在别处,这样的话就要修改默认上传图片保存路径了。

OK,Ueditor在官网上的叙述已经很为详细,我根据官网资料和网上信息,结合自己配置部署出现的问题整理发布。


推荐阅读
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
author-avatar
多米音乐_35753491
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有