我正在使用Ckeditor中的“允许的html标签”过滤器 - Drupal 8。
我希望Ckeditor保留具有特定类或ID的<span>
标记,如果没有属性则删除。
例如 :
<span class="apple">text sample</span>
<span id="fruit">text sample</span>
<span>text sample</span> -> text sample
实际上,当我配置文本格式时,我在允许的标签字段中有这个代码:
<p><sup><sub><span id class="apple"><a href !href accesskey id rel target title>
它使<span>
保持ID或想要的类,但我无法摆脱没有属性的不需要的<span>
。
有没有办法用代码输入解决这个问题?
提前致谢,
埃米莉
所以这里是我编写的自定义模块,以使其工作并解决CKEDITOR中的这个主要错误:
<?php
use Drupal\editor\Entity\Editor;
function MODULENAME_editor_js_settings_alter(array &$settings) {
foreach ($settings['editor']['formats'] as $name => $value) {
$settings['editor']['formats']['machine_name_of_your_text_editor_profile']
['editorSettings']['allowedContent'] =
'p sup h1 h2 h3' +
'span[!id];
span(!foo);
span(!bar);
span(!jane);
span(!doe);'
;}
}
结果:如果没有ID,或者如果您使用此列表中未提及的类(foo,bar,jane或doe),则完全删除跨度。您必须声明需要显示的所有元素,因为此配置将覆盖ACF字段中的所有先前输入。
对于这个解决方案,我的灵感来自:
注意:限制允许的HTML标记和正确的错误HTML过滤器(在/ admin / config / content / formats中)与Ckeditor API不一致。只有部分选项在这个领域真正实现,并使用“!”不工作。这就是提供的解决方案使用“hook_editor_js_settings_alter”的原因。
function MODULENAME_editor_js_settings_alter(array &$settings) {
$formats = ['basic_html', 'full_html'];
foreach ($formats as $format) {
$settings['editor']['formats'][$format]['editorSettings']['allowedContent']['span']['attributes'] = '!class';
}
}
allowedContent是Drupal加载时的数组。您可以使用ACF规则指定是否需要属性,而不是使用字符串替换它。这允许UI的配置仍然适用。