CKEDITOR使用与配置
转http://www.cnblogs.com/Fskjb/archive/2009/11/16/1603461.html
安装: 下载CKEDITOR的文件,解压后复制到工程的WEBROOT目录下就OK!
引用CKEDITOR的JS文件:
新建JSP页面,添加其JS文件<scripttype="text/javascript"src="ckeditor/ckeditor.js"></script>
注意:1.src的路径。
2.不要写成<scripttype="text/javascript"src="ckeditor/ckeditor.js/>样式,在现有的3.0.1版本中会出现CKEDITOR未定义的脚本错误提示,致使不能生成编辑器。
替换TEXTAREA标签:
<textarea rows="30" cols="50" name="editor01">请输入.</textarea> <script type="text/javascript">CKEDITOR.replace('editor01');</script>
注意:要在textarea后面加入javascript.如果要在HEAD区写javasript,那么采用如下代码:
<script type="text/javascript"> window.onload = function() { CKEDITOR.replace( 'editor01' ); }; </script>
好了到此一个默认的CKEDITOR就配置完毕了,可以去页面看看它的模样了。
当然还有一个方法CKEDITOR.appendTo(elementOrId,config)它可以在特定的dom对象中创建CKEDITOR
<div id="editorSpace"><:/div> CKEDITOR.appendTo( 'editorSpace' );
属性配置:
所有的配置,都可以查阅官方的API:
版本3
http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
版本4
http://docs.ckeditor.com/#!/api/CKEDITOR.config
IN-PAGE配置方式:
Thebestwaytosetyourconfigurationsisin-page,whencreatingeditorinstances.InthiswayyouavoidtouchingtheoriginaldistributionfilesintheCKEditorinstallationfolder,makingtheupgradetaskeasier.
最好在创建编辑器的页面中配置你的编辑器属性,使用这种方式,你无需理会在CKEDITOR安装目录中的配置文件(ps:in-page的优先级最高)
CKEDITOR.replace( 'editor1', { toolbar : 'Basic', uiColor : '#9AB8F3' });
注意:合法的属性是以“{”开始,“}”"结束,属性名和属性值用“:”隔离.
默认属性文件配置方式:
Youcanalsoplaceyoursettingsinsidetheconfig.jsfilealso.Youwillnotethatthefileismostlyemptybydefault.Yousimplyneedtoaddtheconfigurationsthatyouwanttochange.Forexample:
你也可以在config.js中加入配置信息,当你打开该文件时你会发觉它几乎为空(默认)。你要做的是把配置信息加入其中。
CKEDITOR.editorConfig = function( config ) { config.language = 'fr'; config.uiColor = '#AADC6E'; };
自定义属性文件配置方式:
Supposeyouhavecopiedconfig,jsinsideafoldernamed"custom"intherootofyourwebsite.Youhavealsorenamedthefileto"ckeditor_config.js".Atthatpoint,youmustonlysetthecustomConfigsettingwhencreatingtheeditorinstances.Forexample:
CKEDITOR.replace( 'editor1', { customConfig : '/custom/ckeditor_config.js' });
假设你在custom目录中有一自定义的配置文件ckeditor_config.js,那么就必须在创建ckeditor实例时制定它的路径(用customConfig属性)。
ConfigurationsOverloadOrder配置的优先级
You'renotrequiredtouseonlyoneoftheaboveconfigurationoptions.Youcanmixallofthem,andtheconfigurationswillbeoverloadedproperly.Thefollowingisconfigurationsloadingorderwhencreatinganeditorinstance:
你不必仅使用上面的一种方式进行配置,而是可以混合使用它们,这些配置会以特定的优先级顺序进行复写。
1.Theeditorinstanceiscreated.Atthispointallitsdefaultconfigurationsareset.
编辑器创建的那一瞬间,会加载默认的配置信息。
2.IfthecustomConfigsettinghasbeenset"in-page",thatfileisloaded,otherwisethedefaultconfig.jsfileisloaded.Allsettingsinthisfileoverridethecurrentinstancesettings.
这时,如果系统发现我们制定了一个自定义的配置文件,那么就会加载它,否则就会加载默认的配置文件。加载的该文件的属性将会复写当前实例的属性。
3.Ifthesettingsloadedinpoint"2"alsodefineanewcustomConfigvalue,thisnewfileisloadedanditssettingsoverloadthecurrentinstancesettings.ThishappensrecursivelyforallfilesuntilnocustomConfigisdefined.
如果在自定义的文件中有加入新的其它自定义文件,那么新的文件会复写当前实例的属性。这样一直循环递归,知道没有新为自定义文件为止。
4.Finallythesettingsdefined"in-page"overridethecurrentinstancesettings(exceptcustomConfig,whichhasbeenusedatpoint"1").
最后行内的属性(除了customConfig)将复习当前实例的属性。
AvoidingLoadingExternalSettingsFiles
Itisalsopossibletocompletelyavoidloadinganexternalconfigurationfile,reducingthenumberoffilesloaded.Todothat,it'senoughtosetthecustomConfigsettingtoanemptystring.Forexample:
CKEDITOR.replace( 'editor1', {customConfig : ''});
Thissettingisdefinitelyrecommende
difyouarenotsettingconfigurationsintheconfig.jsfilenoracustomconfigurationfile.
这段就不翻译了,so,easy!
配置个性化工具栏:
AtoolbardefinitionisaJavaScriptarraythatcontainstheelementstobedisplayedinall"toolbarrows"availableintheeditor.Therearetwowaystosetthedesiredtoolbardefinitionintheeditor.Itcanbesetdirectlyintothe"toolbar"setting,oritcaninsteadbesettoaconfigurationnamed"toolbar_<name>",where"<name>"isanamethatcanbeusedtoidentifythetoolbarinthe"toolbar"setting.Thefollowingisthedefaultsettingwehaveintheeditor.
上面的英文太罗嗦了说重点算了:工具栏是通过数组来设定的,工具栏的名字以toolbar_<name>的方式命名,其中的<name>是用来赋值给config.toolbar这一变量的。
那么以下代码定义了toolbar_Full和toolbar_Basic的两种工具栏配置,并使用了config.toolbar='Full';定义当前的编辑器的工具栏为Full。
其中("-")为空间栏的水平分割,("/")为换行。
config.toolbar = 'Full'; config.toolbar_Full = [ ['Source','-','Save','NewPage','Preview','-','Templates'], ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'], ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'], ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'], '/', ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'], ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'], ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'], ['Link','Unlink','Anchor'], ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'], '/', ['Styles','Format','Font','FontSize'], ['TextColor','BGColor'], ['Maximize', 'ShowBlocks','-','About'] ]; config.toolbar_Basic = [ ['Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink','-','About'] ];
Notethattwotoolbardefinitionshavebeendefined,onenamed"Full"andtheother"Basic".The"Full"definitionhasbeensettobeusedinthetoolbarsetting.
Youcancreateasmanytoolbardefinitionsasyouwantinsidetheconfigurationfile.Later,basedonsomecriteria,youcandecidethetoolbartouseforeacheditorinstance.Forexample,withthefollowingcode,twoeditorsarecreatedinthepage,eachoneusingadifferenttoolbar:
你也可以根据您的需要在配置文件中建立多个工具栏的定义,然后,可以根据特定条件,决定使用哪个定义。
CKEDITOR.replace( 'editor1', {toolbar : 'MyToolbar'}); CKEDITOR.replace( 'editor2', {toolbar : 'Basic'});
It'salsopossibletosetthetoolbardefinitionin-page,whencreatingtheeditorinstancedirectly.Inthatcase,justassignittothetoolbarsettingdirectly,forexample:
也可以通过IN-PAGE的方式定义工具栏参数。
CodeCKEDITOR.replace( 'editor1',{ toolbar :[ ['Styles', 'Format'], ['Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', '-', 'About'] ] });
TheStylesDefinition
ThestylesdefinitionisaJavaScriptarraywhichisregisteredbycallingtheCKEDITOR.addStylesSet()function.Auniquenamemustbeassignedtoyourstyledefinition,soyoucanlaterseteacheditorinstancetoloadit.Itmeansthatyoucanhaveasinglestyledefinitionwhichissharedbyseveraleditorinstancespresentonthepage.
Thefollowingisasamplestyledefinitionregistration:
通过CKEDITOR.addStylesSet()函数,我们可以定义一个样式,结合以下的例子,my_styles为样式的名称,具体的样式为一个JAVASCRIPT数组。通过样式的名称我可以让页面的多个编辑器应用该样式。
CKEDITOR.addStylesSet( 'my_styles', [// Block Styles {name:'Blue Title',element:'h2',styles:{'color' : 'Blue'}}, {name:'Red Title',element:'h3',styles:{ 'color' : 'Red' }}, // Inline Styles {name:'CSS Style',element:'span',attributes:{'class':'my_style'}}, {name:'Marker:Yellow',element:'span',styles:{'background-color':'Yellow'}} ] );
Theabovedefinitionregistrationcanbeplacedinlineinthepageusingtheeditor,orcanevenliveinanexternalfile,whichisloaded"ondemand",whenneededonly(seebelow).
样式可以通过IN-PAGE或配置文件中进行注册。
Afterthat,youmustinstructtheeditortouseyournewlyregisteredstyledefinitionbyusingthestylesCombo_stylesSetsetting.Thismaybesetintotheconfig.jsfile,forexample:
你可以通过在config.js加入以下代码使编辑器应用该样式:
config.stylesCombo_stylesSet = 'my_styles';
UsinganExternalStylesDefinitionFile使用自定义的样式文件
YoucanincludetheabovestylesdefinitionregistrationcallintoanexternalJavaScriptfile.ThisisthepreferredwayforitbecauseitwillbeloadedonlywhenopeningtheStylesselectionbox,enhancingthepageloadingperformance.Usersmayfeelasmallloadinggapbecauseofitthough.
Bydefault,theeditorusesthe"plugins/stylescombo/styles/default.js"file,whichisa"minified"JavaScriptfile.Youcanfindtheuncompressedversionofitat"_source/plugins/stylescombo/styles/default.js".YoucanseeitonlineatourSVNalso:http://svn.fckeditor.net/CKEditor/trunk/_source/plugins/stylescombo/styles/default.js.Itcanbeusedasatemplateforyourcustomfile.
Yourstyledefinitionfilecanbesavedanywhereatyourwebsite(ortheweb).YoumustjustknowtheURLtoreachit.Forexample,youcansaveatitattherootofyourwebsite,soyoucanreachitwith"/styles.js",orevenplaceitinacentralwebsite,soyoucanlocateitwith"http://www.example.com/styles.js".Atthatpoint,simplychangethestylesCombo_stylesSetsettingtopointtheeditortoyourfile:
默认的样式文件在"_source/plugins/stylescombo/styles/default.js"目录中,我们也可以自己定义一个样式文件,如在站点的跟目录中有styles.js这一个样式文件,这个文件通过以下代码指定其路径:
config.stylesCombo_stylesSet = 'my_styles:/styles.js';ORconfig.stylesCombo_stylesSet = 'my_styles:http://www.example.com/styles.js';Style Rules
Theentriesinsideastyledefinitionarecalled"stylerules".Eachruledefinesthedisplaynameforasinglestyleaswellastheelement,attributesandcssstylestobeusedforit.Thefollowingisthegenericrepresentationforit:
{ name:'Display name', element:'tag name(for example "span")', styles:{'css-style1':'desired value','css-style2':'desired value',} attributes:{'attribute-name1':'desired value','attribute-name2':'desired value',} }
The"name"and"element"valuesarerequired,whileothervaluesareoptional.
StyleTypes
Therearethreetypesofstyletypes,eachonerelatedtotheelementusedinthestylerule:
•Blockstyles:appliedtothetextblocks(paragraphs)asawhole,notlimitedtothetextselection.Theelementsvaluesforthatare:address,div,h1,h2,h3,h4,h5,h6,pandpre.
•Objectstyles:appliedtospecialselectableobjects(nottextual),wheneversuchselectionissupportedbythebrowser.Theelementsvaluesforthatare:a,embed,hr,img,li,object,ol,table,td,trandul.
•Inlinestyles:appliedtotextselectionsforstylerulesusingelementsnotdefinedintheotherstyletypes.
OutputFormatting
TheHTMLWriter
这个是用来对各种标签的排版进行设定的
Technicallyspeaking,writingthefinaloutputisataskexecutedbytheCKEDITOR.htmlWriterclass("writer"),usedbytheCKEDITOR.htmlDataProcessorclass.Therefore,thecurrentwriterinstanceforaspecificeditorinstancecanberetrievedbythe<editorInstance>.dataProcessor.writerproperty.
Bysettingthewriterproperties,it'spossibletoconfigureseveraloutputformattingoptions.Thefollowingexampleisthebestwaytosummarizethemostusedofthem,withtheirdefaultvalues:
var writer = editor.dataProcessor.write; // The character sequence to use for every indentation step. writer.indentationChars = '\t'; // The way to close self closing tags, like <br />. writer.selfClosingEnd = ' />'; // The character sequence to be used for line breaks. writer.lineBreakChars = '\n'; // Set writing rules for the <p> tag. writer.setRules( 'p', { // Indicates that this tag causes indentation on line breaks inside of it. indent : true, // Insert a line break before the <p> tag. breakBeforeOpen : true, // Insert a line break after the <p> tag. breakAfterOpen : true, // Insert a line break before the </p> closing tag. breakBeforeClose : false, // Insert a line break after the </p> closing tag. breakAfterClose : true })
SettingWriterRules
Becausethewriterisapropertyofeacheditorinstance,andalsobecauseit'sdependencyonthewriterplugintobeloaded,thebestwaytomakechangestoitisbylisteningtothe"instanceReady"event,soit'ssafetoassumethatthedataProcessorpropertywillbeloadedandreadytochanges.Thefollowingisanexampleofit,whencreatinganeditorinstance:
可以为单一得编辑器指定标签的格式。
CKEDITOR.replace( 'editor1', {on :{ instanceReady : function( ev ){ // Output paragraphs as <p>Text</p>. this.dataProcessor.writer.setRules( 'p',{ indent :false, breakBeforeOpen : true, breakAfterOpen : false, breakBeforeClose : false, breakAfterClose :true }); } } });
AnotherwayforitisbyusingtheCKEDITORobject,soalleditorinstanceswillbechanged:
也可以对所有的编辑器进行设定。
CKEDITOR.on( 'instanceReady', function( ev ){ // Out self closing tags the HTML4 way, like <br>. ev.editor.dataProcessor.writer.selfClosingEnd = '>'; });