Drupal 8 中的 Ckeditor:<span>如果标签没有类属性,如何删除标签?



我在 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>

它使用 ID 或想要的类保持<span>,但我无法摆脱没有属性的不需要的<span>

有没有办法用代码输入解决这个问题?

提前感谢,

艾米莉

所以这是我编写的自定义模块,以使其工作并绕过 CKEDITOR 中的这个主要错误:

<?php 
use DrupaleditorEntityEditor;
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 字段中所有先前的输入。

对于这个解决方案,我的灵感来自:

  • ACF 自定义文档 : https://ckeditor.com/docs/ckeditor4/latest/examples/acfcustom.html
  • 关于hook_editor_js_settings_alter的脚步:https://drupal.stackexchange.com/questions/268311/hook-editor-js-setting...

注意:限制允许的HTML标签和纠正错误的HTML过滤器(在/admin/config/content/format中(与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 中的配置仍然适用。

最新更新