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

时间:2018-10-10 02:11:44

标签: ckeditor drupal-8

我在Ckeditor-Drupal 8中使用“允许的html标签”过滤器。

我希望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>

有什么办法可以通过代码输入解决这个问题?

预先感谢

Emilie

2 个答案:

答案 0 :(得分:2)

所以这是我编写的自定义模块,以使其正常工作并解决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”的原因。

答案 1 :(得分:1)

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规则指定是否需要属性,而不用字符串替换。这样,用户界面中的配置仍然可以应用。