CKEditor:如何在编辑器中自动应用/加载模板?

时间:2010-09-25 10:44:23

标签: templates ckeditor javascript-framework

我在我的一个网站上使用WYSIWYG编辑器CKeditor。为了更加用户友好,我想在每次使用编辑器时自动加载特定模板。客户必须应用此模板,以便与网站的其余部分(设计内容显示在两列中)进行良好集成,因此我希望轻松完成任务。

现在,我正在使用我在CKeditor论坛上找到的以下代码:

CKEDITOR.replace("newsContent", {
    customConfig : "/ckeditor/config/news.js",
    on:{ instanceReady : function( ev ) { 
           this.execCommand('templates');
       }
    },
});

这几乎是好的,因为它允许打开模板选择页面,因此用户可以在编辑之前直接选择模板(他只有一个选择)。

但我想应用(仅)模板而不要求用户在模板选择页面中选择它。

所以我想知道是否存在像“execCommand”这样的函数来在编辑器中应用模板?我认为这是我在模板选择页面中点击模板时执行的操作,但我在文档中找不到它。

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

这个适合我。

CKEDITOR.replace("newsContent", {
    customConfig : "/ckeditor/config/news.js",
    on:{ instanceReady : function( ev ) { 
           insert = CKEDITOR.getTemplates('your_required_template_name');
           this.setData(insert.templates[0].html);
       }
    },
});

答案 1 :(得分:2)

我尝试了完全相同的事情,我必须报告使用当前版本的ckeditor ork的解决方案不起作用。花了几个小时花时间搞清楚如何强制ckeditor加载模板插件(ckeditor在打开模板对话框后完全加载模板插件)我放弃了并决定尝试其他解决方案。如果您想直接使用.setData方法,那么解决方案非常简单:

  1. 在html中的某处定义模板,例如在div或script标签中,并使用jQuery复制模板
  2. 由于ckeditor模板的功能非常有限,你应该把jsrender放在一个完整的模板引擎上。
  3. 只要您拥有所需的html模板,只需将其传递给.setData。

答案 2 :(得分:1)

Zima是对的,你必须首先加载模板,否则你最终会得到getTemplates返回undefined

这样的事情可以解决问题:

CKEDITOR.loadTemplates(CKEDITOR.config.templates_files, '');
        var ck = CKEDITOR.replace(elm[0], {               
            on: {
                 instanceReady: function (ev) {                       
                    var insert = CKEDITOR.getTemplates('default');
                    this.setData(insert.templates[0].html);
                }
            }
        });

答案 3 :(得分:0)

FYI需要在获取模板之前加载模板

**CKEDITOR.loadTemplates(CKEDITOR.config.templates_files,'')**
insert = CKEDITOR.getTemplates('default');
editor.setData(insert.templates[11].html);

希望这有助于某人