WYSIWYG + CKEditor'un html sınıflarını çıkarmasını önleyin


9

CKEditor ile WYSIWYG editörü kullanıyorum. "Kaynak" görünümünden öğelerime özel sınıflar eklerken, CKEditor kaynak görünümünden geçiş yaparken bu sınıfları şeritler buluyorum.

Bunun çözümü için googling yaparken, tek başına CKEditor kullanırken bunu nasıl düzelteceğinizi açıklayan CKEditor modül sayfasını buldum . (Temel olarak, config.allowedContent = trueGelişmiş İçerik Filtresi ayarlarında bir JS yapılandırması ayarlamamız gerekir ).

Ancak, CKEditor'u WYSIWYG ile kullanırken, bu ayarlar yönetici arayüzünde gösterilmez. CKEditor'u WYSIWYG ile kullanırken aynı şeyi nasıl elde edersiniz?

Not: Medya eklentisi ile entegre olmadığı için CKEditor'u tek başına kullanamıyorum .


Kitaplıklar klasörünüze hangi CKEditor sürümünü indirdiniz?
Beebee

sürüm 4.2 kullanarak
jrharshath

Yanıtlar:


4

Hangi CKEditor sürümünü kullanıyorsunuz? Otomatik İçerik Filtresi (ACF) adlı bir özelliğe sahip olan ve düzenleyici için tanımlanmamış nitelikleri otomatik olarak çıkaracak bir sorun olan CKEditor 4.1+ ile ilgili bir sorun var: https://drupal.org/node/1956778

Sayıdaki 37 numaralı yama benim için çalıştı.


yama benim için başarısız olsa da, ben editors/ckeditor.inc's wysiwyg_ckeditor_settingsfunciton "allowedContent = true" kodlanmış
jrharshath

Çalıştığına sevindim. Bu yamanın wysiwyg'nin -dev sürümüne uygulanması gerekir, bu yüzden bu yüzden geçerli değildi.
Dave Bruns

Yamada bu tek satırdan çok daha fazlası var. Her şeyin buna göre çalışması için tamamen test ettiğinizden emin olun!
Beebee

10

Bir çözüm buldum.

Bu filtrelemeyi kapatır, işe yarıyor, ama iyi bir fikir değil ...

config.allowedContent = true;

Bir içerik dizesiyle oynamak id, etc için iyi çalışır ancak sınıf ve stil nitelikleri için iyi değildir, çünkü sınıf ve stil filtrelemesi için () ve {} vardır.

Yani bahse girerim editörde herhangi bir sınıfa izin vermek:

config.extraAllowedContent = '*(*)';

Bu, herhangi bir sınıfa ve herhangi bir satır içi stile izin verir.

config.extraAllowedContent = '*(*);*{*}';

Herhangi bir etiket için yalnızca class = "asdf1" ve class = "asdf2" öğelerine izin vermek için:

config.extraAllowedContent = '*(asdf1,asdf2)';

(böylece sınıf adlarını belirtmeniz gerekir)

Yalnızca p = için yalnızca class = "asdf" öğesine izin vermek için:

config.extraAllowedContent = 'p(asdf)';

Herhangi bir etiket için kimlik özelliğine izin vermek için:

config.extraAllowedContent = '*[id]';

vesaire vesaire

Stil etiketine izin vermek için (<style type = "text / css"> ... </style>):

config.extraAllowedContent = 'style';

Biraz daha karmaşık olmak için:

config.extraAllowedContent = 'span;ul;li;table;td;style;*[id];*(*);*{*}';

Umarım daha iyi bir çözümdür ...


1
NEREDE?!?!!?!? hangi dosyada !!! İnternette hiç kimse bu config.allowedContent ayarının yapılacağı YER'den bahsetmedi mi?
coderama

/ admin / config / content / ckeditor'da @coderama, düzenlemek için profilinizi seçin, Gelişmiş seçenekleri genişletin ve Özel JavaScript yapılandırmasına koyun
UnsettlingTrend

2

Bu, WYSIWYG modülüne eklenmesi gereken bir şey gibi görünüyor, editörlere özel ayarlar ekleme yeteneği oldukça yaygın bir gerekliliktir. Ancak bunun yokluğunda, yükseltmeleri bozacağı için modülün kendisini düzenlememenizi tavsiye ederim ... neyse ki modül bir çağrı sağlıyor drupal_alter, bu yüzden özel bir modülde:

function mymodule_wysiwyg_editor_settings_alter(&$settings, $context){
    //check if the editor is ckeditor and the version is at least 4.0
    if($context['profile']->editor=='ckeditor' && $context['editor']['installed version'][0]>3){
        //add custom settings for ckeditor 4.+ here
        $settings['allowedContent'] = TRUE;
    }
}

burada "mymodule" özel modülünüzün adıdır. Bu, başka birinin modülünü düzenlemeden görevi yerine getirir.


0

/ Wysiwyg / editörler / ckeditor.inc modüllerine aşağıdakileri eklemeyi deneyin

'allowedContent' => TRUE, için function wysiwyg_ckeditor_settings($editor, $config, $theme)

böylece şimdi okur:

function wysiwyg_ckeditor_settings($editor, $config, $theme) {
  $settings = array(
    'width' => 'auto',
    // For better compatibility with smaller textareas.
    'resize_minWidth' => 450,
    'height' => 420,
    // @todo Do not use skins as themes and add separate skin handling.
    'theme' => 'default',
    'skin' => !empty($theme) ? $theme : 'kama',
    // By default, CKEditor converts most characters into HTML entities. Since
    // it does not support a custom definition, but Drupal supports Unicode, we
    // disable at least the additional character sets. CKEditor always converts
    // XML default characters '&', '<', '>'.
    // @todo Check whether completely disabling ProcessHTMLEntities is an option.
    // ADDED  'allowedContent' => TRUE, to keep WYSIWYG from removing classes
    'entities_latin' => FALSE,
    'entities_greek' => FALSE,
    'allowedContent' => TRUE, 
  );

0

Herhangi bir kaynağı hacklemeden ve ayrıca bu ayarların nerede okunduğunu anlamaya çalışmadan, bunu kendi özel modülünüze ekleyebilirsiniz

function mymodule_wysiwyg_editor_settings_alter(&$settings, $context) {
    if ($context['profile']->editor == 'ckeditor') {
        $settings['extraAllowedContent'] = array(
            'a[download,type,length,href]',
            'span;ul;li;table;tr;td;style;*[id];*(*);*{*}'
        );
    }
}

OP'nin istediği *(*);*{*}ayarlar yukarıdaki @Tommy'nin cevabından. Bu, herhangi bir öğede sınıf ve stil niteliklerine izin veriyor gibi görünüyor. Gerisi sadece örnek girişlerdir. Başka bir örnek olarak, bu girdi medya modülünün ihtiyaç duyduğu etiketlere izin verir.

'img[title,alt,src,data-cke-saved-src](wysiwyg-break,drupal-content);video[width,height,controls,src](*);source[src,type];audio[controls,src](*);img[*](media-element,file-default)',

0

Filtrelenen HTML filtresi, izin verilen HTML öğelerinde olmayan öğelerin sınıflarını çıkarır . Paragraf etiketi ( <p>) varsayılan olarak orada değildir (kafa karıştırıcı ve doğal olmayan olabilir), ancak sınıfın uygulandığı en sık kullanılan öğe olabilir. Buraya koyduğunuzda, Filtrelenmiş HTML artık bu etiketlerdeki sınıfları kaldırmayacaktır. Aynı resim etiketleri ( <img>) için de geçerlidir.


Ancak, HTML öğelerinin İzin verilen seçeneğine sınıf nasıl eklenir. Bildiğim kadarıyla HTML öğesini listeye koyabilirsiniz, örneğin <div>, <span> vs.
CodeNext

Oraya bir sınıf koymaya gerek yok. HTML öğesi listede yer alıyorsa, sınıfları dokunulmadan kalır ve çıkarılmaz.
15'te cptstarling

Gönderimin neden dün gösterildiğini anlamıyorum, bunu birkaç ay önce sormuştum, herhangi bir sorun var mı ???????
CodeNext

Garip, çünkü cevapladığınız cevap sadece yaklaşık 2 günlük :)
cptstarling

Hiçbir erkek, çok garip, bu konuda aylardır hiçbir şey yapmadım ... Aman tanrım, çıkıp tekrar giriş yapmama izin ver ....
CodeNext
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.