给FCKEditor增加上传文件后提交文件路径、段落属性修改等功能

最近在给一个公司做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"/>,否则可能造成在浏览文件时上传中文文件乱码。

 

关于段落控制插件,有些朋友关注,我上传了几个文件。

 

你可能感兴趣的:(html,Web,fckeditor)