Odoo 9中有一个所见即所得编辑器,它在任何空行上添加<p>
标记,并用它们包围几乎每一行。这完全破坏了模板。因此,如果你有一个很好的电子邮件模板,例如你的发票电子邮件,即使你在发送之前没有手动编辑任何内容,他们也会被这个编辑器清除。
我们如何禁用所见即所得编辑器的这种行为?
编辑
有问题的函数是text_to_html
,可以在addons/web_editor/static/src/js/backend.js
中找到。你可以通过简单地将其剥离为这样的东西来禁用它的过度行为:
text_to_html: function (text) {
var value = text || "";
return value;
}
但是,在核心文件中这样做将在下一次更新时覆盖更改。所以我现在的问题是,从自定义模块覆盖这个函数的正确方法是什么。我熟悉添加新模型的基本Odoo模块,但我不确定如何覆盖odoo.define
定义的Odoo JavaScript,到目前为止还没有找到相关文档。
派对迟到了一点,但如果这对某人有帮助的话。。。
首先,它已经在ODOO GitHub存储库中修复了,下面使用的代码就是从那里开始的。如果你能更新ODOO。如果不能,您应该创建新的模块并将其安装在ODOO中。如果你不知道如何参考文档。
将包含以下内容的JavaScript文件放入模块:
odoo.define('web_editor_sanitize_fix.backend', function (require) {
'use strict';
var core = require('web.core');
var backend = require('web_editor.backend');
backend.FieldTextHtmlSimple.include({
text_to_html: function (text) {
var value = text || "";
try {
$(text)[0].innerHTML;
return text;
} catch (e) {
if (value.match(/^s*$/)) {
value = '<p><br/></p>';
} else {
value = "<p>"+value.split(/<br/?>/).join("<br/></p><p>")+"</p>";
value = value.replace(/<p></p>/g, '').replace('<p><p>', '<p>').replace('<p><p ', '<p ').replace('</p></p>', '</p>');
}
}
return value;
}
});
});
我还没有测试代码,但它应该可以工作。