CKEditor在线编辑器增加一个自定义插件
CKEditor是一个非常优秀的在线编辑器,它的前身就是FCKEditor,CKEditor据官方说是重写了内核的,但功能和性能比FCKEditor更为强大和优越。记得07年的时候第一次接触FCKEditor,那时候花了一天时间研究如何在它基础上增加一个自定义插件,可以参考这里http://j2ee.blog.sohu.com/36813753.html,但过程比较复杂和麻烦。其实CKEditor提供了非常方便的可扩展的插件体系,用户通过它的扩展插件体系就可以非常方便的增加自定义插件,我这里简单的给出一个完整的插件示范。
先到http://ckeditor.com/这里下载最新版本的CKEditor,我下载的是3.3.1版,大概有2M左右,包含了全部源码和测试用例。下载完毕后,解压到硬盘,假设CKEditor解压后的目录是${ckeditor},下面提到的都是用这个进行替代。下面就开始一步步制作属于我们自己的插件了。
一、创建插件目录结构
1、进入到${ckeditor}\plugins目录下,创建目录helloworld,这个目录名称就是我们的插件名称
2、在helloworld目录下分别建立三个目录:dialogs、images、lang
二、编写插件文件
每个插件都会有一个plugin.js的插件文件存在于插件目录的根目录下,一般使用CKEditor提供的API来进行插件的动态增加。首先,我们在helloworld目录下建立plugin.js文件,使用utf-8存储,该文件的内容如下:
/**
- * Title:CKEditor插件示范
- * Author:铁木箱子(http://www.mzone.cc)
- * Date:2010-08-02
- */
- CKEDITOR.plugins.add('helloworld', {
- lang:['zh-cn','en'],
- requires: ['dialog'],
- init: function(a){
- var b = a.addCommand('helloworld', new CKEDITOR.dialogCommand('helloworld'));
- a.ui.addButton('helloworld', {
- label: a.lang.tbTip,
- command: 'helloworld',
- icon: this.path + 'images/hello.png'
- });
- CKEDITOR.dialog.add('helloworld', this.path + 'dialogs/helloworld.js');
- }
- });
三、插件的对话框
我们在上面的插件文件中写了一个requires: ['dialog'],表示当点击工具栏上的插件图标时会调用一个对话框来进行处理。我们先在helloworld\dialogs目录下建立一个helloworld.js文件,使用utf-8保存,内容如下:
/**
- * Title:CKEditor在线编辑器的代码插入插件
- * Author:铁木箱子(http://www.mzone.cc)
- * Date:2010-07-21
- */
- CKEDITOR.dialog.add('helloworld', function(editor) {
- var _escape = function(value){
- return value;
- };
- return {
- title: editor.lang.dlgTitle,
- resizable: CKEDITOR.DIALOG_RESIZE_BOTH,
- minWidth: 360,
- minHeight: 150,
- contents: [{
- id: 'cb',
- name: 'cb',
- label: 'cb',
- title: 'cb',
- elements: [{
- type: 'textarea',
- required: true,
- label: editor.lang.mytxt,
- style: 'width:350px;height:100px',
- rows: 6,
- id: 'mytxt',
- 'default': 'Hello World'
- }]
- }],
- onOk: function(){
- var mytxt = this.getValueOf('cb', 'mytxt');
- editor.insertHtml(mytxt);
- },
- onLoad: function(){
- }
- };
- });
四、插件的语言文件支持
CKEditor本身就是支持i18n的,因此我们可以为插件定义多种语言,这样可以适应更多的场合。进入helloworld\lang目录,在这个目录下建立en.js和zh-cn.js两个文件,分别用来支持中文和英文,内容分别如下:
/**
- * 支持英文的语言包(文件名称en.js),第一个参数是插件名称
- */
- CKEDITOR.plugins.setLang('helloworld', 'en', {
- tbTip : 'Hello World Plugin Demo',
- mytxt : 'Text',
- dlgTitle : 'Hello World Plugin Demo(Powered By mzone.cc)'
- });
- /**
- * 支持英文的语言包(文件名称zh-cn.js),第一个参数是插件名称
- */
- CKEDITOR.plugins.setLang('helloworld', 'zh-cn', {
- tbTip : 'Hello World插件示范',
- mytxt : '文本',
- dlgTitle : 'Hello World 插件示范(Powered By mzone.cc)'
- });
这里定义的语言都是我们在插件中使用到的变量,一般在插件文件中的使用是editor.lang.propName,其中editor是当前的编辑器实体变量,插件一般都会传递的,propName是我们在语言文件中定义的属性名称,比如这里的tbTip等。
五、插件的图片指定
我们其实在第二步编写插件文件中中已经指定了插件的图片文件:icon: this.path + ‘images/hello.png’。这里的icon指的就是在编辑器工具栏上显示的图标,我们这里找一个16×16大小的png图片,命名为hello.png,然后放到helloworld\images目录下即可。
六、演示验证插件
完成上面5个步骤后,插件基本上就已经完成了。为了能够使插件可以出现在编辑器的工具栏中,我们还需要做如下配置:
1、打开${ckeditor}\config.js文件,修改内容为如下:
CKEDITOR.editorConfig = function( config )
- {
- // Define changes to default configuration here. For example:
- // config.language = 'fr';
- // config.uiColor = '#AADC6E';
- config.language = 'zh-cn';
- config.toolbar_MyBasic = [
- [ 'Bold', 'Italic', '-', 'NumberedList','BulletedList' ],
- ['-', 'Link', 'Unlink', 'Image', 'helloworld' ]
- ];
- config.extraPlugins += (config.extraPlugins ? ',helloworld' : 'helloworld');
- };
其中config.extraPlugins这行是关键,表明这个是我们编写的额外插件,需要集成到CKEditor中去。这个仅仅是注册而已,如果需要显示在工具栏中,还要定义一个toolbar,比如我们这里定义了一个MyBasic的toolbar,并且只选取了CKEditor中最常用的几个工具,然后最后我们增加了helloworld的插件,这样我们就把刚才编写的插件注册到MyBasic的toolbar中了。
2、写一个demo.html文件进行测试
我们在${ckeditor}根目录下建立一个demo.html文件来测试下我们刚写的插件是否有效,内容如下:
<html>
- <head>
- <title>CKEditor插件编写示例-Powered By mzone.cc</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <script type="text/javascript" src="ckeditor.js"></script>
- </head>
- <body>
- <textarea cols="80" id="editor1" name="editor1" rows="10">This is the content!</textarea>
- <script>
- CKEDITOR.replace("editor1", {
- toolbar : 'MyBasic',
- height : 300,
- width : 800
- });
- </script>
- </body>
- </html>
然后在浏览器中打开demo.html文件,就可以看到在编辑器的工具栏中最后一个就是我们刚写的插件了,如下图所示:

七、插件包下载和部署
上面演示效果的完整插件包可以从这里下载,将插件包下载后,安装如下方式进行部署:
1、解压插件包,将helloworld目录整个复制到${ckeditor}\plugins目录下;
2、将demo.html文件复制到${ckeditor}根目录下;
3、将第六步中的修改config.js文件内容替换掉${ckeditor}\config.js文件的内容;
4、完成后,在浏览器中运行demo.html文件即可看到效果
CKEditor在线编辑器增加一个自定义插件的更多相关文章
- 如何在magento后台增加一个自定义订单状态
magento后台订单状态(order status)只有Pending.Processing.On Hold.Closed.Canceled.Pending Payment 等等,如何在magent ...
- 将kindeditor在线编辑器制作成smarty插件
在web开发中,在线编辑器是经常要用到的功能模块,虽说配置在线编辑器没有多大难度,但是每一次编写重复的代码,总是让人感觉不爽. 本篇,就来讲解一下,如何将kindeditor制作成smarty的一个自 ...
- [K/3Cloud] 首页增加一个自定义页签及页面内容
在K3Cloud登录后的门户首页增加一个页签,如增加一个[BBS论坛] 2013-7-30 11:18:51 上传 下载附件 (84.81 KB) 增加页签 可以这么来做: 进入BOS IDE ,找 ...
- 最新版CKEditor在线编辑器的配置方法
下载地址: http://ckeditor.com/download 使用方法: 在页面<head>中引入ckeditor核心文件ckeditor.js <script type=& ...
- 黄聪:如何给wordpress的编辑器添加一个自定义按钮,并且实现插入功能
1.添加按钮 在 functions.php 文件里面添加下面代码: add_action('media_buttons', 'add_my_media_button'); function ad ...
- 在线编辑器CKeditor,CKfinder
在线编辑器的分类: 常见的在线编辑器有很多,比较常用的有FCKeditor(在线编辑器——Ajax 浏览器 端服务器文件管理器),CKeditor(在线编辑器与服务器端文件管理器的分离,) 其中CKe ...
- Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 (主要是NSLayoutConstraint 的使用)
当前位置: > Swift新手入门 > Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 时间:2014-09-10 16:49来源:未知 作者:啊成 举报 点击:5 ...
- 【02】markdown在线编辑器
[01]在线编辑器 https://www.zybuluo.com/mdeditor 在线 Markdown 编辑阅读器 pen - 是一个Markdown编辑器工具.demo 你可以试试这个在线的m ...
- 05传智_jbpm与OA项目_部门模块中增加部门的jsp页面增加一个在线编辑器功能
这篇文章讲的是在线编辑器功能,之前的部门模块中,增加部门的功能jsp页面起先是这么做的.
随机推荐
- 更换免开发证书账号出现的Your build settings specify a provisioning profile with the UUID"",however,no such provisioning profile was found
更换了免费的个人开发者账号后会出现这个错误 解决方法:在Finder中右键打开工程文件(显示包内容),用文本编辑器打开后缀名为.pbxproj的文件,command+f 搜索"PROVISI ...
- JavaScript高级程序开发3笔记
Js对象 注意:js基本数据类型不是对象,但是"abc".match()这种,可以调用对象的方法,是因为调用方法是临时产生了一个wrapper的包装对象,this指向它: Js ...
- setTimeout、clearTimeout、setInterval,clearInterval ——小小计时器
先看下效果 话不多说上代码~ <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Typ ...
- eclipse注册码生成,在eclipse3.3.x上测试可用
这段时间刚加入一个新的项目组,项目组使用的Flex框架. 开发工具由项目组统一提供,使用的是Eclipse 3.3.0,里面包含了其他开发人员集成上去的许多插件,个人感觉比较实用.但是这个版本Ecli ...
- 【转载】应读者强烈要求给出《超容易的Linux系统管理入门书》一书的主要知识点
刚开始了一篇连载,收到广大Linux爱好者的反馈,非常欣慰.大家对Linux学习感到很迷茫,不知道学哪些内容,如何学习? <超容易的Linux系统管理入门书>一书是腾讯Linux专家在腾讯 ...
- [easyui] datebox源码阅读. 批注
jquery.datebox.js 文件. (function($){ /** * create date box */ function createBox(target){ var state = ...
- 清理c盘垃圾(将一下代码复制到记事本然后把后缀名改为xxx.bat,然后双击,就ok了!!)
@echo off echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._m ...
- 一种简单的权限管理ER图设计
权限管理支持动态地管理用户的角色和权限.权限代表用户可以在什么对象上进行什么操作:角色是一组权限的集合. PS:当增加或删除某个用户的角色时,系统自动将该角色对应的权限(角色 -权限关联表)增加或删除 ...
- PHP文件操作
1.递归获取目录下文件的个数 function getFileCount($dir){ if(!is_dir($dir)) return false; //打开目录 $handle = opendir ...
- StringBuilder的Append()方法会比+=效率高
StringBuilder strSql = new StringBuilder(); strSql.Append("select top 1 id from " + databa ...