最近在给一个公司做java版的web后台的时候,顺便研究了一下FckEditor,给其增加一些功能,当然前提是不修改fck的主要文件,以方便以后升级。。记录一下以作参考。
1.上传文件提交后,即时修改页面upfiles.value以保存上传文件路径,只修改两个文件fckeditor.js和fckconfig.js两个文件。
修改fckeditor.js文件添加Savepathfilename
修改fckconfig.js文件添加函数setUploadFile修改页面upfiles.value(如果upfiles存在的话),如果upfiles.onchange已定义则激活。
// Edit by lurocky for setUploadFile FCKConfig.setUploadFile = function(_res) { if(!_res) return; var Savepathfilename = FCKURLParams['Savepathfilename']; if (Savepathfilename) { var objLinkUpload = parent.document.getElementsByName(Savepathfilename)[0]; if (objLinkUpload){ if (objLinkUpload.value.indexOf(_res) == -1) { if (objLinkUpload.value!=""){ objLinkUpload.value = objLinkUpload.value + "|" + _res; } else { objLinkUpload.value = _res; } if (objLinkUpload.onchange) { objLinkUpload.onchange(); } } } } } FCKConfig.uploadFileUrl = ''; FCKConfig.getEvalString = function( A ) { var B = A.toString(); return B.substring(B.indexOf("{") + 1, B.lastIndexOf("}")); }; FCKConfig.FCKLanguageManagerTranslatePageString = FCKConfig.getEvalString(FCKLanguageManager.TranslatePage); FCKConfig.OnUploadCompleted = function ( errorNumber, fileUrl, fileName, customMsg ) {}; FCKConfig.Ok = function () {}; FCKLanguageManager.TranslatePage = function( A ) { eval(FCKConfig.FCKLanguageManagerTranslatePageString); var DLwin = A.defaultView || A.parentWindow; if (DLwin.OnUploadCompleted) { FCKConfig.OnUploadCompleted = DLwin.OnUploadCompleted; DLwin.OnUploadCompleted = function ( errorNumber, fileUrl, fileName, customMsg ) { if (fileUrl != '') { FCKConfig.uploadFileUrl = fileUrl; } return FCKConfig.OnUploadCompleted ( errorNumber, fileUrl, fileName, customMsg ); }; if (DLwin.Ok) { FCKConfig.Ok = DLwin.Ok; DLwin.Ok = function () { if (FCKConfig.uploadFileUrl != '' && FCKConfig.uploadFileUrl == DLwin.GetE('txtUrl').value) { FCKConfig.setUploadFile(DLwin.GetE('txtUrl').value); } return FCKConfig.Ok(); }; } } }; // Edit end
Fck每一个上传页面都用到FCKLanguageManager.TranslatePage,而且都有OnUploadCompleted和Ok两个主要函数,所以我在fckconfig.js添加代码重新定义FCKLanguageManager.TranslatePage,在运行完原有FCKLanguageManager.TranslatePage后添加代码重定义OnUploadCompleted和Ok两个上传页面函数(在函数运行前添加代码激活setUploadFile)。
2.添加插件paragraph,修改段落属性。并在不修改任何fck源文件的情况下右键菜单中添加监听。
// Register the related commands. FCKCommands.RegisterCommand( 'Paragraph', new FCKDialogCommand( FCKLang["DlgPar"], FCKLang["DlgPar"], FCKConfig.PluginsPath + 'paragraph/paragraph.html', 260, 300 ) ) ; // Create the "Parapraph" toolbar button. var ParapraphItem = new FCKToolbarButton( 'Paragraph', FCKLang['DlgPar'] ) ; ParapraphItem.IconPath = FCKConfig.PluginsPath + 'paragraph/paragraph.gif' ; FCKToolbarItems.RegisterItem( 'Paragraph', ParapraphItem ) ; // 'Parapraph' is the name used in the Toolbar config. function FCK_ContextMenu_GetListener_Paragraph() { return { AddItems : function( menu, tag, tagName ) { if ( tagName == 'P' || FCKSelection.HasAncestorNode( 'P' ) || tagName == 'DIV' || FCKSelection.HasAncestorNode( 'DIV' ) ) { menu.AddSeparator() ; menu.AddItem( 'Paragraph', FCKLang['DlgPar'], ParapraphItem.IconPath ) ; } } }; } FCK.ContextMenu.RegisterListener( FCK_ContextMenu_GetListener_Paragraph( ) );
3.FckEditor一直没有流媒体上传,2.5版终于有个Media的属性了,不过还没有上传实例,估计下个版本会添加了。参考其他上传实例做了个当插件用。
另外filemanager/browser/default/frmupload.html文件应该添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>,否则可能造成在浏览文件时上传中文文件乱码。
关于段落控制插件,有些朋友关注,我上传了几个文件。