CKEditor otomatik olarak div sınıfları şeritler


140

Web sitemde arka uç editörü olarak CKEditor kullanıyorum . Kaynak düğmesine bastığımda kodu nasıl göründüğüne göre değiştirmek istiyor gibi olsa da beni virajın etrafında sürüyor. Örneğin, kaynak vurmak ve bir oluşturmak <div>...

<div class="myclass">some content</div>

O zaman hiçbir belirgin nedeni sınıftan şeritler çıkarır <div>, bu yüzden kaynağa tekrar vurduğumda ...

<div>some content</div>

Bu tahriş edici davranış kapalı olabilir sanırım config.js, ama kazma ve kapatmak için belgelerde bir şey bulamıyorum.


8
Config.js içine gidip CKEDITOR.config.allowedContent = true; o zaman editörün bir şeylerle uğraşmasını durdurur.
Iain Simpson

Yanıtlar:


284

İçerik filtrelemeyi devre dışı bırakma

En kolay çözüm config.js adresine giderek :

config.allowedContent = true;

( Tarayıcının önbelleğini temizlemeyi unutmayın ). Daha sonra CKEditor girilen içeriğe filtre uygulamayı durdurur. Ancak, bu tamamen devre dışı bırakılacak , en önemli CKEditor özelliklerinden biri olan içerik filtrelemeyi .

İçerik filtrelemeyi yapılandırma

Ayrıca , yalnızca ihtiyacınız olan bu öğeye, sınıflara, stillere ve niteliklere izin vermek için CKEditor'un içerik filtresini daha hassas bir şekilde yapılandırabilirsiniz . Bu çözüm çok daha iyidir, çünkü CKEditor, tarayıcıların içerik kopyalarken ve yapıştırırken ürettiği çok fazla crappy HTML'yi kaldıracaktır, ancak istediğiniz içeriği soymayacaktır.

Örneğin, tüm div sınıflarını kabul etmek için varsayılan CKEditor yapılandırmasını genişletebilirsiniz:

config.extraAllowedContent = 'div(*)';

Veya bazı Bootstrap eşyaları:

config.extraAllowedContent = 'div(col-md-*,container-fluid,row)';

Veya, isteğe bağlı dirözellikler dtve ddöğeler içeren açıklama listelerine izin verebilirsiniz :

config.extraAllowedContent = 'dl; dt dd[dir]';

Bunlar çok basit örneklerdi. Nitelikler, sınıflar veya stiller gerektiren, yalnızca özel öğeleri eşleştiren, tüm öğeleri eşleştiren her türlü kuralı yazabilirsiniz. Ayrıca, öğelere izin vermeyebilir ve CKEditor kurallarını tamamen yeniden tanımlayabilirsiniz. Hakkında daha fazla bilgi:


3
Bu özelliği devre dışı bırakır. Yapılandırmayı devre dışı bırakmaktan daha iyidir.
oleq

1
@lain Simpson: Bu soruyu hala cevaplandığı gibi ayarlamanız gerekiyor. Çözümü bulmak için teşekkürler b: D
Jacob van Lingen

1
Bazen bu çözüm işe yarıyor, bazen işe yaramıyor. Stil özelliği kaldırılır, ancak bazen geri kalanı kalır.
machineaddict

2
Bu editörü kullanan Kentico adında bir şeyle çalışıyorum. "CKEDITOR.config.allowedContent = true;" satırını ekledim ancak yine de Bootstrap kodumu kıran HTML kodumu yeniden biçimlendiriyor, herhangi birinin fikri var mı?
Tom Bowen

1
Mükemmel çözüm için teşekkürler. Benim için bir gün koruyucu.
Soony

61

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]';

vs vs

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
Bu superberb ta
Rippo


Cevabınız için 10 yıldız
Brijesh Mavani

Çabalarınız için şeref!
Michel

15

Düzenle : bu cevap drupal ckeditor modülünü kullananlar içindir.

Ckeditor js dosyasını değiştirmeyi gerektirmeyen bir çözüm buldum.

bu cevap buradan kopyalanır . tüm krediler asıl yazara gitmelidir.

"Yönetici >> Yapılandırma >> CKEditor"; Profiller altında profilinizi seçin (örn. Tam).

Bu profili düzenleyin ve "Gelişmiş Seçenekler >> Özel JavaScript yapılandırması" na ekleyin config.allowedContent = true;.

resim açıklamasını buraya girin

"Performans sekmesi" altındaki önbelleği temizlemeyi unutmayın.


4
Bu cevap sadece drupal içindir ... ama yine de teşekkürler, çünkü sadece drupal bir çözüm arıyordum.
LarS

1
@LarS ilginç. Bu sorunun neden drupal ile ilgili olduğunu düşündüğümü hatırlayamıyorum, ancak drupal erkeklere yardımcı olduğu anlaşılıyor.
Ocak

14

CKEditor v4.1'den beri, bunu CKEditor'un config.js dosyasında yapabilirsiniz:

CKEDITOR.editorConfig = function( config ) {
  config.extraAllowedContent = '*[id](*)';  // remove '[id]', if you don't want IDs for HTML tags
}

İzin Verilen İçerik Kurallarının ayrıntılı sözdizimi için resmi belgelere başvurabilirsiniz.


Yukarıda bir sözdizimi hatası var. Özellikle stil nitelikleri, parens () yerine süslü braches {} ile ayarlanmalıdır
kamelkev

Merhaba kamelkev, cevabım soruya göre stiller için değil, sınıflar içindir . Temel olarak, bunu kullanıyorum ve bir hata olduğunu sanmıyorum.
Marty ZHANG

Cevabınız için teşekkürler *[id](*), hile yaptınız, daha *[id,class]önce denedim , ancak bu bir şekilde sınıf özelliğine izin vermiyor. CKeditor belgeleri biraz labirent gibidir.
GDmac

1
+1 Diğer kuralların çoğunun önerdiği gibi, içerik kurallarını anlamak muhtemelen tüm filtrelemeyi devre dışı bırakmaktan daha iyi bir çözümdür.
Michael Martin-Smucker

10

ckeditor 4.x kullanıyorsanız deneyebilirsiniz

config.allowedContent = true;

ckeditor 3.x kullanıyorsanız bu sorunu yaşıyor olabilirsiniz .

config.js içine aşağıdaki satırı koymayı deneyin

config.ignoreEmptyParagraph = false;

config.ignoreEmptyParagraph=false;denediğim tüm cevaplar için benim için çalışan tek çözüm. Teşekkür ederim.
Stefan

9

Buna ckeditor'da ACF (Otomatik İçerik Filtresi) denir.

config.allowedContent = true;


4

CKEditor kütüphanesi ile Drupal AND "WYSIWYG" adlı modülü kullanırsanız, aşağıdaki geçici çözüm bir çözüm olabilir. Benim için cazibe gibi çalışıyor. Drupal 7.33'te CKEditor 4.4.5 ve WYSIWYG 2.2 kullanıyorum. Bu geçici çözümü burada buldum: https://www.drupal.org/node/1956778 .

İşte: Ben özel bir modül oluşturmak ve ".module" dosyasına aşağıdaki kodu koymak:

<?php
/**
 * Implements hook_wysiwyg_editor_settings_alter().
 */
function MYMODULE_wysiwyg_editor_settings_alter(&$settings, $context) {
  if ($context['profile']->editor == 'ckeditor') {
    $settings['allowedContent'] = TRUE;
  }
}
?>

Umarım bu diğer Drupal kullanıcılarına yardımcı olur.


Bu drupal cevap için teşekkürler
16:16

3

CKEDITOR 4.x'in tam örneği aşağıdadır :

HTML

<textarea name="post_content" id="post_content" class="form-control"></textarea>

SENARYO

CKEDITOR.replace('post_content', {
   allowedContent:true,
});

Yukarıdaki kod, editördeki tüm etiketlere izin verecektir.

Daha fazla ayrıntı için: CK EDITOR İzin Verilen İçerik Kuralları


0

Filtrelenmiş html (Metin Biçimi açılır kutusundaki düzenleyicinin altında) yerine tam html kullanmaya geçişin bu sorunu benim için çözdüğünü buldum. Aksi takdirde stil ortadan kalkar.


0

Bu config.allowedContent = true eklemek istiyorum; ckeditor.config.js dosyasına config.js değil, config.js benim için hiçbir şey yapmadı ama ckeditor.config.js dosyasının üst alanına eklemek div sınıflarımı sakladı


0

Drupal kullanıyorsanız başka bir seçenek de kullanmak istediğiniz css stilini eklemektir. bu şekilde stil veya sınıf adını çıkarmaz.

yani benim durumumda drupal 7'deki css sekmesi altında

dinle = span.icon-facebook2

yazı tipi stilleri düğmesinin etkin olup olmadığını da kontrol edin


0

Aynı sorun ckeditor 4.7.1 ile krom ile de karşılaşıyorum. Ckeditor instanceReady'de pasteFilter'ı devre dışı bırakmanız yeterlidir.Bu özellik, Gelişmiş İçerik Filtresi'nin (ACF) tüm filtre seçeneklerini devre dışı bırakır.

 CKEDITOR.on('instanceReady', function (ev) {
        ev.editor.pasteFilter.disabled = true;
    });
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.