Ckeditor в Drupal 8: как удалить теги <span>, если они не имеют атрибутов класса? - PullRequest
0 голосов
/ 10 октября 2018

Я использую фильтр «Разрешенные теги html» в Ckeditor - Drupal 8.

Я хочу, чтобы Ckeditor сохранил <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> с идентификаторами или требуемыми классами, но я не могуизбавиться от ненужных <span> без атрибутов.

Есть ли способ решить эту проблему с помощью ввода кода?

Заранее спасибо,

Эмилия

Ответы [ 2 ]

0 голосов
/ 09 мая 2019
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';                                                                                                                                                                                                                                                                                                                                                                              
  }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
}   

allowContent - это массив, загружаемый Drupal.Вместо того, чтобы заменить его строкой, вы можете использовать правила ACF, чтобы указать, требуются ли атрибуты.Это позволяет применить конфигурацию из пользовательского интерфейса.

0 голосов
/ 19 апреля 2019

Итак, вот пользовательский модуль, который я написал, чтобы заставить его работать и обойти эту серьезную ошибку в 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);'
   ;}
}

Результат: пролеты полностью удаляются, если нет идентификатора или если вы используетекласс, который не упоминается в этом списке (foo, bar, jane или doe).Вы должны объявить все элементы, которые должны отображаться, потому что эта конфигурация перезапишет все предыдущие входные данные в поле ACF.

Для этого решения меня вдохновили:

Примечание. Ограничьте допустимые теги HTML и исправьте неисправный фильтр HTML (в / admin / config / content / format)) не действует в соответствии с API Ckeditor.Только часть опций действительно реализована в этой области и использует "!"не работаетВот почему предоставленное решение использует «hook_editor_js_settings_alter».

...