以下討論是基于CuteEditor6.0版本,它的案例可以在這里下載到“CuteEditor6.0多語(yǔ)言版(集成lic文件)”。CuteEditor6.0和CuteEditor5.0是有些地方不一樣的,而網(wǎng)上關(guān)于CuteEditor的教程多為把兩者混為一談,又或者教程中沒(méi)有特別注明所講軟件版本,這很容易給讀者帶來(lái)迷惑。
比如CuteEditor5.0經(jīng)本人測(cè)試發(fā)現(xiàn)默認(rèn)已支持文件名含中文字符的文件上傳,在CuteSoft_Client\CuteEditor\Configuration\Security\Default.config文件中,也是沒(méi)有<security name="filenamePattern" />節(jié)點(diǎn)的。另外CuteEditor5.0不支持把上傳的文件自動(dòng)命名為時(shí)間格式,因?yàn)樵贑uteSoft_Client\CuteEditor\Configuration\Security\Default.config文件中沒(méi)有<security name="UseTimeStampRenameUploadedFiles">true</security>節(jié)點(diǎn),你就是給它加上也是不起作用的。最后就是CuteEditor5.0在Firefox瀏覽器中運(yùn)行的不是很好,光標(biāo)無(wú)法定位到編輯器內(nèi),解決辦法就是先切換到HTML視圖,然后在切換回普通視圖,此時(shí)再在編輯器內(nèi)單擊光標(biāo),就可以把光標(biāo)定位到編輯器中。
CuteEditor6.0頁(yè)面前端不能用腳本getHTML()獲得編輯器內(nèi)容,因?yàn)間etHTML()根本不存在,既不在當(dāng)前頁(yè)面腳本中定義,也在外鏈腳本中也找不找這個(gè)方法的定義,而CuteEditor5.0可以(CuteEditor5.0有些腳本方法即使存在,在不同瀏覽器下不一定都能正常工作)。博客園是用了較新版本的CuteEditor,前臺(tái)腳本對(duì)編輯器內(nèi)容的驗(yàn)證只是作了非空驗(yàn)證,它的代碼是這樣的:
if (document.getElementById('CE_Editor_Edit_EditorBody_ID') != null && document.getElementById('CE_Editor_Edit_EditorBody_ID').value == '')
{
alert("請(qǐng)輸入內(nèi)容!");
return false;
}
一、第一印象
第一印象用八個(gè)字形容完全不過(guò)分,即“功能強(qiáng)大,配置靈活”。
二、最簡(jiǎn)單的配置
最簡(jiǎn)單的配置就是一切使用默認(rèn)配置,從網(wǎng)上下載這個(gè)編輯器后往網(wǎng)站根目錄下對(duì)應(yīng)目錄一丟就完畢。這非常適合首次使用CuteEditor的用戶(hù),他往往想第一時(shí)間看看CuteEditor運(yùn)行起來(lái)是什么樣子的。
現(xiàn)在說(shuō)說(shuō)這種最簡(jiǎn)單的配置。CuteEditor真正的代碼其實(shí)就存在兩個(gè)文件夾中,已編譯代碼存在bin目錄,包含(CuteEditor.dll、CuteEditor.ImageEditor.dll、NetSpell.SpellChecker.dll、cuteeditor.lic、*.dic),另一個(gè)文件夾就是CuteSoft_Client。其中bin目錄中的NetSpell.SpellChecker.dll和眾多的dic文件是拼寫(xiě)功能要用到的,使用與否自由決定。
假設(shè)你的網(wǎng)站根目錄為wwwroot,把上面兩個(gè)文件夾丟到wwwroot目錄下,然后在wwwroot目錄下新建一個(gè)名為“Uploads”的文件夾(大小寫(xiě)當(dāng)然無(wú)關(guān),通常這個(gè)文件夾已在CuteEditor案例包中),這就是編輯器上傳文件默認(rèn)存放的文件夾。最終的網(wǎng)站目錄結(jié)構(gòu)看起來(lái)像下面那樣:
wwwroot/bin/ CuteEditor.dll
CuteEditor.ImageEditor.dll
……
wwwroot/CuteSoft_Client/CuteEditor/
wwwroot/CuteSoft_Client/CuteEditor/ Configuration/
……
現(xiàn)在把bin目錄的CuteEditor.dll添加到VS工具箱,以方便使用,不用自己書(shū)寫(xiě)代碼和設(shè)置屬性等。操作方法是打開(kāi)VS后,在工具箱的“常規(guī)”選項(xiàng)卡下右鍵選擇“選擇項(xiàng)”,在出現(xiàn)的對(duì)話框中選擇“瀏覽”按鈕,找到bin目錄下的CuteEditor.dll添加即可,此時(shí)回到VS窗口,發(fā)現(xiàn)工具箱多出了如下控件列表,另外CuteEditor.ImageEditor.dll也可以添加進(jìn)來(lái)。
此時(shí)拖動(dòng)Editor控件到頁(yè)面中,點(diǎn)擊右鍵可以查看編輯器的屬性、事件等,如下圖。
此時(shí)你甚至不設(shè)置任何屬性就運(yùn)行這個(gè)頁(yè)面,你會(huì)發(fā)現(xiàn)一切正常了。這時(shí)回到網(wǎng)站目錄下發(fā)現(xiàn)多出兩個(gè)文件來(lái)了:1、wwwroot/bin/App_Licenses.dll,2.wwwroot/licenses.licx。看名字就知道是軟件授權(quán)文件,不用管它,記得在把網(wǎng)站上傳到服務(wù)器的時(shí)候,把這兩個(gè)文件一起上傳就沒(méi)錯(cuò)了。
現(xiàn)在講講如何在服務(wù)器端和客戶(hù)端獲取和設(shè)置編輯器的內(nèi)容。
〖服務(wù)器端〗
獲取:string editorContent = this.Editor1.Text
設(shè)置:this.Editor1.Text = "編輯器內(nèi)容……"
〖客戶(hù)端〗
獲取:var editorContent = document.getElementById('<%=Editor1.ClientID%>').getHTML()
設(shè)置:document.getElementById(' <%=Editor1.ClientID%>').setHTML("編輯器內(nèi)容……")
getHTML()和setHTML()兩個(gè)客戶(hù)端腳本方法在CuteEditor5.0通過(guò),6.0版本不行(“寫(xiě)在前面”部分內(nèi)容有講過(guò)),但可以這樣document.getElementById('<%=Editor1.ClientID%>').value,這樣得到的值有些字符被編碼了,所以此方法用來(lái)驗(yàn)證一下內(nèi)容輸入還是可以的,博客園編輯器就是用這種方法驗(yàn)證非空的。
三、初級(jí)(常見(jiàn))配置
使用默認(rèn)配置顯然在很多場(chǎng)合下是不適用的。現(xiàn)在我特別講講CuteEditor文件上傳控制。CuteEditor可以上傳不同類(lèi)型的文件(圖片、Flash、音視頻、文檔文件等),可以限制單文件大小和格式,還可以把不同類(lèi)型文件存在不同的文件夾,并可以控制各文件夾的大小,比如默認(rèn)情況下圖片等文件都是上傳到wwwroot/Uploads文件夾中的,單張圖片最大限制是200k,圖片最多上傳到100M 。
這些配置節(jié)點(diǎn)都可以在wwwroot \CuteSoft_Client\CuteEditor\Configuration\Security\Default.config文件中進(jìn)行修改,打開(kāi)此文件,根據(jù)節(jié)點(diǎn)的命名,你應(yīng)該知道各個(gè)節(jié)點(diǎn)是配置什么屬性的,如果不清楚,請(qǐng)查看我的參考文章。
因?yàn)橥ǔ>庉嬈髦幸蟼鞯奈募际菆D片文件,所以我根據(jù)一個(gè)類(lèi)似新聞發(fā)布編輯器進(jìn)行以下配置,并作說(shuō)明。
<security name="OverWriteExistingUploadedFile">true</security>
<security name="UseTimeStampRenameUploadedFiles">true</security>
<security name="ImageGalleryPath">~/Admin/NewsImages</security>
<security name="MaxImageSize">1024</security>
<security name="MaxImageFolderSize">1024000</security>
<security name="ImageFilters">
<item>.jpg</item>
<item>.jpeg</item>
<item>.gif</item>
<item>.png</item>
</security>
上面配置表示可以上傳的單張圖片最大為1024k(1M),圖片上傳總?cè)萘繛?024000k(1G),允許上傳的圖片格式為jpg、jpeg、gif、png,圖片統(tǒng)統(tǒng)上傳到wwwroot/Admin/NewsImages文件夾。其中把UseTimeStampRenameUploadedFiles設(shè)為true是讓上傳的圖片在服務(wù)器上自動(dòng)重命名為時(shí)間的格式,像這樣“20090711154023805.jpg”,而不是原來(lái)的名字。OverWriteExistingUploadedFile設(shè)為true是覆蓋存在的同名文件,如果這個(gè)選項(xiàng)不打開(kāi),在本地電腦有兩張同名圖片,其實(shí)圖片內(nèi)容是不一樣的,都是無(wú)法同時(shí)上傳的。其它類(lèi)型文件配置同理。
另外在CuteEditor控件屬性列表中可以修改以下三個(gè)常用屬性:
(1)AutoConfigure="Simple" 編輯器工具欄按鈕顯示復(fù)雜度(多少)選項(xiàng),這里選擇簡(jiǎn)單的,即較少按鈕那種編輯器界面。
(2)CustomCulture="zh-CN" 對(duì)于多國(guó)語(yǔ)言版本,這里可以設(shè)置成對(duì)應(yīng)的語(yǔ)言,這是設(shè)為“中文”。
(3)ThemeType="Office2003_BlueTheme" 設(shè)置編輯器風(fēng)格,從Window系統(tǒng)主題去理解你就清楚了。
四、更多配置
在一開(kāi)始的時(shí)候我就說(shuō)過(guò)CuteEditor的配置是很靈活的,配置的選項(xiàng)也是特別多,一方面我們可以在VS屬性欄改一部分配置,也可以在cs代碼中動(dòng)態(tài)改變屬性,這都是針對(duì)一個(gè)編輯器實(shí)例的,也可以改wwwroot\CuteSoft_Client\CuteEditor\Configuration文件下的各個(gè)配置文件,這些通常是全局的,比如像上面那樣,把圖片指定保存在wwwroot/Admin/NewsImages,這樣你在幾個(gè)地方使用了編輯器,圖片都是保存在下面文件夾的。具體怎么改呢?CuteEditor都有哪些屬性?可以參考官方文檔。配置太多了,我都只是了解了點(diǎn)皮毛。
另外在wwwroot\CuteSoft_Client\CuteEditor\Configuration\Security下可以看到有三個(gè)文件:Admin.config、Default.config、Guest.config,這是為不同用戶(hù)角色準(zhǔn)備的。至于每個(gè)編輯器實(shí)例要使用那個(gè)配置文件,可以在CuteEditor控件的屬性窗口改變SecurityPolicyFile屬性的值。在實(shí)際應(yīng)用中,在同一個(gè)頁(yè)面為不同會(huì)員等級(jí)的用戶(hù)分配不同的配置文件,一方面可以根據(jù)用戶(hù)權(quán)限選擇顯示對(duì)應(yīng)的Panel,每個(gè)Panel放置調(diào)用不同配置文件的編輯器實(shí)例,另一個(gè)更好的辦法就是在代碼中動(dòng)態(tài)改變SecurityPolicyFile的屬性值。
五、其它高級(jí)應(yīng)用思路
(1)為每個(gè)用戶(hù)分配屬于自己的上傳文件夾。
比如你把CuteEditor編輯器用在多用戶(hù)博客系統(tǒng)中,你將需要這種解決方案。博客園(cnblogs.com)就是用CuteEditor編輯器的一個(gè)案例。下面代碼實(shí)現(xiàn)把每個(gè)用戶(hù)上傳文件存放到Uploads目錄下以他用戶(hù)名命名的子文件夾中:
string userName = Session["UserName"].ToString();
fullPath = Server.MapPath("Uploads\\") + userName;
if (!Directory.Exists(fullPath))
{
Directory.CreateDirectory(fullPath);
}
this.Editor1.SetSecurityGalleryPath("~/Uploads/" + userName);
(2)為不同等級(jí)用戶(hù)分配不同大小的文件上傳空間。
比如QQ移動(dòng)硬盤(pán)分配給用戶(hù)的大小免費(fèi)與收費(fèi)當(dāng)然是不一樣的。在一些多用戶(hù)博客系統(tǒng)中,為了激勵(lì)一些積極的博主,可以為某些用戶(hù)開(kāi)綠色通道,提供更大的文件存儲(chǔ)空間。CuteEditor一樣可以實(shí)現(xiàn)這樣的功能。實(shí)現(xiàn)思路是在wwwroot\CuteSoft_Client\CuteEditor\Configuration\Security文件夾下建立多個(gè)配置文件(默認(rèn)已有三個(gè)配置文件了),每個(gè)文件對(duì)應(yīng)一種用戶(hù)權(quán)限,然后在調(diào)用編輯器的頁(yè)面的代碼頁(yè)動(dòng)態(tài)改變編輯器的SecurityPolicyFile屬性,把其屬性值設(shè)置為Security目錄下對(duì)應(yīng)配置文件的名字就行了。
六、注意事項(xiàng)
(1)文件名含中文字符的文件無(wú)法上傳問(wèn)題。
編輯CuteSoft_Client\CuteEditor\Configuration\Security\Default.config文件,找到節(jié)點(diǎn)<security name="filenamePattern" />,修改成<security name="filenamePattern">^[a-zA-Z0-9\._\s-\u4e00-\u9fa5]+$</security>,然后保存即可。
(2)授權(quán)問(wèn)題。
如果使用的編輯器沒(méi)有許可文件將出現(xiàn)授權(quán)提示,影響你正常使用,請(qǐng)購(gòu)買(mǎi)許可。我用的是特別版,當(dāng)然不可用于商業(yè)用途。許可文件就是根目錄下的“licenses.licx”文件。
(3)應(yīng)用主題(Theme)設(shè)置后,編輯器上傳圖片等對(duì)話框出錯(cuò)問(wèn)題。
這個(gè)錯(cuò)誤是.Net運(yùn)行錯(cuò)誤,根據(jù)錯(cuò)誤信息可以知道對(duì)應(yīng)那個(gè)對(duì)話框頁(yè)面的<head>標(biāo)簽缺少“runat=”Server””屬性。找到對(duì)應(yīng)的錯(cuò)誤頁(yè),加上那個(gè)runat屬性,使其最終看起來(lái)像這樣就行了:<head runat="server">。
(4)Uploads目錄權(quán)限問(wèn)題。
就是在服務(wù)器上要為編輯器上傳文件的文件夾開(kāi)放everyone用戶(hù)可寫(xiě)入權(quán)限。