`
tdwm
  • 浏览: 50005 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ckeditor image上传js 修改成plugin的方法

阅读更多

在上一个文章中,介绍了自己写的一个image上传的ckeditor的 js的 扩展 ,发现在editor.destory();后在生成editor的时候,自己写的image上传的就调用不了了,没有自己查明原因,觉得可能是 CKEditor.on('pluginsLoad',function(){})的加载的问题,于是修改成了插件的方式。

 

建立步骤如下:

 

1.首先在ckeditor的plugins文件夹下面建立一个myAddImage文件夹,注意 最好文件夹得名字的大小写 ,如果你用是linux系统,那么如果把myAddImage 写成 myaddimage 那么ckeditor会获取不到,我在测试的时候就犯了这个错误。

2.在myAddImage文件夹下建立plugin.js文件。

  文件内容:

CKEDITOR.plugins.add( 'myAddImage',{
    init : function( editor )
    {   
       /*
       /* 获取CKEditorFuncNum
       */
       var getFuncNum = function(url) {
          var reParam = new RegExp('(?:[\?&]|&)CKEditorFuncNum=([^&]+)', 'i') ;
          var match = url.match(reParam) ;
          return (match && match.length > 1) ? match[1] : '' ;
        };
       /*
       /*  iframe onload处理 
        *  这段可以放在外面,根据不同的返回值自行进行处理
        */
        var getAjaxResult = function (t){
            var _id = this.getId();
            var _doc = this.getFrameDocument();
            //获取页面返回值
            var data = _doc.getBody().getHtml();
            //firebrowser的处理
            CKEDITOR.tools.callFunction(t.listenerData, data);
            this.removeListener('load', getAjaxResult);
        }

        CKEDITOR.dialog.add( 'myAddImage', function( editor )
        {
            return {
                    title : '添加图片',
                    minWidth : 400,
                    minHeight : 200,
                    contents : 
                    [
                        {
                            id : 'addImage',
                            label : '添加图片',
                            title : '添加图片',
                            filebrowser : 'uploadButton',
                            elements :
                            [
                              {    
                                  id : 'txtUrl',
                                  type : 'text',
                                  label : '图片网址',
                                  required: true
                              },
                              {
                                    id : 'photo',
                                    type : 'file',
                                    label : '上传图片',
                                    style: 'height:40px',
                                    size : 38
                              },
                              {
                                   type : 'fileButton',
                                   id : 'uploadButton',
                                   label : '上传',
                                   filebrowser :
                                   {
                                        action : 'QuickUpload',
                                        target : 'addImage:txtUrl',
                                        onSelect:function(fileUrl, errorMessage){
                                            //在这里可以添加其他的操作
                                        }
                                   },
                                   onClick: function(){
                                        var d = this.getDialog();
                                        var _photo =  d.getContentElement('addImage','photo');
                                        _funcNum = getFuncNum(_photo.action);
                                        var _iframe =  CKEDITOR.document.getById(_photo._.frameId);
                                        //可以查看ckeditor.event doc 了解此段代码
                                        //http://docs.cksource.com/ckeditor_api/
                                        _iframe.on('load', getAjaxResult, _iframe, _funcNum);
                                   },
                                   'for' : [ 'addImage', 'photo']
                              }
                            ]
                        }
                   ],
                   onOk : function(){
                       _src = this.getContentElement('addImage', 'txtUrl').getValue();
                       if (_src.match(/(^\s*(\d+)((px)|\%)?\s*$)|^$/i)) {
                           alert('请输入网址或者上传文件');
                           return false;
                       }
                       this.imageElement = editor.document.createElement( 'img' );
                       this.imageElement.setAttribute( 'alt', '' );
                       this.imageElement.setAttribute( 'src', _src );
                       //图片插入editor编辑器
                       editor.insertElement( this.imageElement );
                   }
            };
        });
        editor.addCommand( 'myImageCmd', new CKEDITOR.dialogCommand( 'myAddImage' ) );
        editor.ui.addButton( 'AddImage',
        {
                label : '图片',
                icon:'images/images.jpg', //toolbar上icon的地址,要自己上传图片到images下
                command : 'myImageCmd'
        });
    },
    requires : [ 'dialog' ]
});
 

 

 可以看出和上个文章的myeditor.js 的代码与本文中CKEDITOR.dialog.add中没有什么区别。

 关于为什么要用额外的

getAjaxResult  

是因为有很多时候,我们的返回值不一定就直接是图片web地址,可能是json数据,要进行处理。

我没有发现firebrowser的

onSelect:function(fileUrl, errorMessage){
                                            //在这里可以添加其他的操作
                                        }

会有对目标(

 target : 'addImage:txtUrl',

的值的更新能够处理的,不论你在onselect中对fileUrl如何赋值,都不会影响txtUrl中的值。

 

3.就是外部如何调用这个plugin了

 

 var editor = CKEDITOR.replace( id,
 {
         extraPlugins : 'myAddImage', //就是这里
         toolbar : ['Source','-','Bold','Italic','Underline','Strike','-','Link','-','Unlink','-','AddImage'],
         filebrowserUploadUrl : '/upload.php'
 });
 

你也可以在config.js里面添加

 extraPlugins : 'myAddImage'

这句话

 

分享到:
评论
6 楼 pengscheng 2010-09-30  
tdwm 写道
wyongzhi 写道
楼主,_iframe.on('load', getAjaxResult, _iframe, _funcNum);这句话导致getAjaxResult 这个一直都在执行,上传成功的同时,出现了溢出错误

1.是否有返回值?
2.返回值在成功的时候可以把_iframe的onload事件去掉
看看通过以上两点能处理不?


请问楼主怎样去掉_iframe的onload时间呢?谢谢
5 楼 fulong258 2010-09-30  
楼主:我按照附件的配置好,打开页面,出现一个简单的textarea框,点击create按钮后,全部消失!但直接打开压缩包里面的index.html文件则可以正常显示,谁能帮我想想是哪方面的问题,我的是JSP
4 楼 tdwm 2010-08-12  
wyongzhi 写道
楼主,_iframe.on('load', getAjaxResult, _iframe, _funcNum);这句话导致getAjaxResult 这个一直都在执行,上传成功的同时,出现了溢出错误

1.是否有返回值?
2.返回值在成功的时候可以把_iframe的onload事件去掉
看看通过以上两点能处理不?
3 楼 wyongzhi 2010-08-10  
楼主,_iframe.on('load', getAjaxResult, _iframe, _funcNum);这句话导致getAjaxResult 这个一直都在执行,上传成功的同时,出现了溢出错误
2 楼 tdwm 2010-06-17  
hongliang19840806 写道
filebrowserUploadUrl : '/upload.php' 这里的upload.php是否需要返回值呢?还是只需要处理上传的文件即可?

需要返回值,返回值的样式可以自己设定,在getAjaxResult  函数中进行处理返回值,返回值要包含图片上传后的路径,这样你处理后,才可以把路径插入到编辑器中
1 楼 hongliang19840806 2010-06-11  
filebrowserUploadUrl : '/upload.php' 这里的upload.php是否需要返回值呢?还是只需要处理上传的文件即可?

相关推荐

    ckeditor-simple-image-plugin:一个为 CKEditor 添加图片的简单插件

    ckeditor-简单图像插件 一个为 CKEditor 添加图片的简单插件 #GPL 许可证 该程序是免费软件:您可以根据自由软件基金会发布的 GNU 通用公共许可证(许可证的第 3 版或(由您选择)任何更高版本)的条款重新分发和/或...

    CKEditor_4_Image_Upload:CKEditor 4的简单隐藏iframe图片上传按钮

    CKEditor 4图片上传CKEditor 4的简单隐藏iframe图片上传按钮下载档案将imageupload文件夹上传到ckeditor插件文件夹 [removed][removed][removed] CKEDITOR.plugins.addExternal('imageupload', '/ckeditor/plugins/...

    ckeditor-img-upload:一键上传和添加图像信息CKEditor

    #CKEditor Image Uploader 这是直接从您的计算机上传图像文件的解决方案之一。 使用 Bootstrap、jQuery 和 PHP 构建。 #Step by Step 要上传图片,我们只需要点击上传图片按钮,浏览您要上传的图片,最后我们只需要...

    有关CKEditor图片上传框的定制

    如果你想改变图片上传对话框的外观或功能,可以修改`dialog/image2.js`文件。这里可以调整字段的显示顺序、添加自定义选项,甚至添加新的表单字段来收集额外的信息,如图片描述或分类。 4. **扩展上传功能**: ...

    ckeditor5-build-classic-10.0.1.zip

    文件列表中的"ckeditor5-build-classic"很可能是编辑器的构建文件夹,包含JavaScript、CSS、图片等资源,用于在网页中集成CKEditor 5 Classic Build。 在实际应用中,CKEditor 5 Classic Build 10.0.1可以用于: -...

    ckeditor5-plugins:自定义ckeditor5插件(例如

    CKEditor5-plugins基于ckeditor5的,适用于自定义构建的插件包。要使用此插件包,则不建议直接使用官方的classic、document、inline、balloon等构建,建议自定义构建features 包含功能├── src│ ├── clear-...

    将CKfinder 整合进CKEditor3.0 的实例

    3. **添加CKFinder插件到CKEditor**:CKEditor支持插件系统,我们需要将CKFinder的插件文件(`ckfinder_plugin.js`)复制到CKEditor的`plugins`目录下。 4. **注册CKFinder插件**:在CKEditor的实例化代码中,使用`...

    ckeditor5-custom-upload

    "ckeditor5-custom-upload" 是一个基于 CKEditor 5 的自定义上传插件项目,它主要用于在富文本编辑器中实现用户友好的文件上传功能。CKEditor 5 是一个流行的开源富文本编辑器,提供强大的文本格式化、媒体插入和...

    cdeditor 使用

    然后通过JavaScript调用`CKEDITOR.replace()`方法初始化编辑器: ```html <textarea id="myEditor"></textarea> CKEDITOR.replace('myEditor'); ``` ### 3. 配置选项 CDitor 提供丰富的配置选项,可以根据需求...

    如何在FCKeditor 2.6中添加插入视频和音频功能

    - 插件开发通常涉及创建一个新目录,比如`fckeditor/plugins/video`,并在此目录下放置必要的文件,如`plugin.js`(插件主文件)、`lang`(语言文件)和`icons`(图标资源)。 - 在`plugin.js`中,你需要定义插件...

Global site tag (gtag.js) - Google Analytics