CKEditor 自訂ToolBar按鈕

CKEditor 自訂ToolBar按鈕

CKEditor是個強大的編輯器,在很多專案中都是用這個編輯器讓user編輯頁面。

因為介面十分類似Word,所以一般人都能輕易上手。

只是最好還是要有Html的底子,不然有時候要排版也是會有困難。

基本的CKeditor的安裝跟使用還有跟CKFinder整合我就不多說啦。

直接進入正題,自訂一個ToolBar按鈕。

將CKEditor下載回來解壓縮丟到網站目錄中,在ckeditor資料夾下可以看到一個"config.js"檔,

這檔案是拿來做一些設定用的


    config.uiColor = '#AADC6E';
    config.contentsCss = ['/Content/layout.css', '/Content/html.css'];
    config.toolbar_Full = [['Source', '-', 'Save', 'NewPage', 'Preview', '-', 'Templates'],
                           ['Undo', 'Redo', '-', 'SelectAll', 'RemoveFormat'],
                           ['Styles', 'Format', 'Font', 'FontSize'],
                           ['TextColor', 'BGColor'],
                           ['Maximize', 'ShowBlocks', '-', 'About'], '/',
                           ['Bold', 'Italic', 'Underline', 'Strike', '-', 'Subscript', 'Superscript'],
                           ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', 'Blockquote', 'CreateDiv'],
                           ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'],
                           ['Link', 'Unlink', 'Anchor'],
                           ['Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak'],
                           ['Code']]; 
    config.extraPlugins = 'CodePlugin';
};

前幾行的設定都是一般的設定,uiColor是ckeditor的框框顏色,contentsCss是可以將css檔載入,

在編輯時就可以看到套用css後的效果

toolbar_Full是設定所要的功能,因為有很多我都用不到,所以就剩下上面所列的這些,

注意最後一個['Code'],這不是內建的功能,這是我待會要擴充的功能,因此先放到toolbar中。

最後一行也是比較重要的就是 config.extraPlugins = 'CodePlugin';

CodePlugin就是等等我們擴充的功能名稱(可自訂)。

接著在ckeditor/plugins底下新增一個同上面那個名稱的資料夾,並在裡面加入一個plugin.js檔,如下圖所示

 2010-09-01_000213

接著就在plugin.js檔內加入下面的code


{
    init: function (editor) {
        // Add the link and unlink buttons.
        editor.addCommand('CodePlugin', new CKEDITOR.dialogCommand('CodePlugin')); //定義dialog,也就是下面的code
        editor.ui.addButton('Code',     //定義button的名稱及圖片,以及按下後彈出的dialog
        {                               //這裡將button名字取叫'Code',因此剛剛上方的toolbar也是加入名為Code的按鈕
            label: '插入高亮程式碼',
            icon: '/images/icon/codeicon.png',
            command: 'CodePlugin'
        });
        //CKEDITOR.dialog.add( 'link’, this.path + 'dialogs/link.js’ ); 
        //dialog也可用抽離出去變一個js,不過這裡我直接寫在下面
        CKEDITOR.dialog.add('CodePlugin', function (editor) {      
        //以下開始定義dialog的屬性及事件          
            return {                        //定義簡單的title及寬高
                title: '插入程式碼',
                minWidth: 500,
                minHeight: 400,
                contents: [              
                    {
                        id: 'code',
                        label: 'code',
                        title: 'code',
                        elements:              //elements是定義dialog內部的元件,除了下面用到的select跟textarea之外
                            [                  //還有像radio或是file之類的可以選擇
                            {
                                type: 'select',
                                label: 'Language',
                                id: 'language',
                                //required: true,
                                'default': 'csharp',
                                items: [['C#', 'csharp'], ['CSS', 'css'], ['Html', 'xhtml'], ['JavaScript', 'js'], ['SQL', 'sql'], ['XML', 'xml']]
                            }
                            , {
                                id: 'codecontent',
                                type: 'textarea',
                                label: '請輸入程式碼',
                                style: 'width:700px;height:500px',
                                rows: 30,
                                'default': ''
                            }
                            ]
                    }
                    ],
                onOk: function () {                                    
                    //當按下ok鈕時,將上方定義的元件值取出來,利用insertHtml
                    //將組好的字串插入ckeditor的內容中
                     code = this.getValueOf('code', 'codecontent');    
                     lang = this.getValueOf('code', 'language');
                     editor.insertHtml("<pre class=\"brush:" + lang + ";\">" + code + "</pre>");
                }
           };  
       });
    }
})

基本上這樣就好了。其實不難,只是有點繁瑣而已。

先來看看結果

2010-09-01_002221

按下之後跳出的dialog

2010-09-01_002253

按下確定之後,就會生出我們設定的Tag來,其餘的東西,就是要記得載入高亮語法的套件囉。

2010-09-01_002513

參考資料:

 CKEditor官網

 Hacking ckeditor: 为ckeditor增加代码高亮的plugin