我已经设置了我的 CKEditor 实例,以便在查看 WYSIWYG(实时)模式时[image:abc123]
替换为图像的实际 URL。
例如,在 HTML 源代码视图中,您会看到:
<img src="[image:abc123]" />
但是当您查看所见即所得(实时)模式时,它会显示:
<img src="/file/image/abc123" />
这是我作为插件添加的插件代码:
CKEDITOR.plugins.add( 'myplugin',
{
requires : ['richcombo'],
init : function( editor )
{
var config = editor.config, lang = editor.lang.format;
/* Images */
editor.dataProcessor.dataFilter.addRules({
elements: {
img: function( element ) {
var file_id = element.attributes.src.match(/\[image:([a-zA-Z0-9-]+)\]/);
if (file_id)
element.attributes.src = site_url + 'file/image/' + file_id[1];
}
}
});
}
});
现在这一切正常,直到我使用图像属性对话框编辑图像。当我点击保存时,它会删除我上面的插件代码并将图像显示为 404。
我发现一些代码可以检测图像对话框是否已保存,以便我可以应用相同的代码。这是更新的插件代码:
CKEDITOR.plugins.add( 'myplugin',
{
requires : ['richcombo'],
init : function( editor )
{
var config = editor.config, lang = editor.lang.format;
/* Images */
editor.dataProcessor.dataFilter.addRules({
elements: {
img: function( element ) {
var file_id = element.attributes.src.match(/\[image:([a-zA-Z0-9-]+)\]/);
if (file_id)
element.attributes.src = site_url + 'file/image/' + file_id[1];
}
}
});
/* When image properties saved, make sure image retains its URL */
CKEDITOR.on('dialogDefinition', function(ev) {
// Take the dialog name and its definition from the event data
var dialogName = ev.data.name;
var dialogDefinition = ev.data.definition;
if (dialogName == 'image') {
dialogDefinition.onOk = function(e) {
/* Images */
editor.dataProcessor.dataFilter.addRules({
elements: {
img: function( element ) {
var file_id = element.attributes.src.match(/\[image:([a-zA-Z0-9-]+)\]/);
if (file_id)
element.attributes.src = site_url + 'file/image/' + file_id[1];
}
}
});
};
}
});
}
});
它可以工作,但我在图像对话框中设置的所有属性都没有添加到图像中。这几乎就像我的代码覆盖了插件代码......我需要添加什么来完成这项工作?