CKEditor स्वचालित रूप से div से कक्षाएं स्ट्रिप्स करता है


140

मैं अपनी वेबसाइट पर बैक एंड एडिटर के रूप में CKEditor का उपयोग कर रहा हूं। यह मुझे मोड़ के पास चला रहा है, हालांकि जब भी मैं स्रोत बटन दबाता हूं तो यह कोड को कैसे बदलना चाहता है, इसे फिट देखना चाहता है। उदाहरण के लिए अगर मैं स्रोत से टकराता हूं और एक <div>...

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

यह तब बिना किसी स्पष्ट कारण के कक्षा से अलग हो जाता है <div>, इसलिए जब मैंने स्रोत को फिर से मारा तो इसे बदल दिया गया है ...

<div>some content</div>

मुझे लगता है कि इस परेशान व्यवहार को बंद किया जा सकता है config.js, लेकिन मैं खुदाई कर रहा हूं और इसे बंद करने के लिए दस्तावेज़ीकरण में कुछ भी नहीं ढूंढ सकता।


8
मैंने बहुत खुदाई के बाद समाधान पाया, यदि आप config.js में जाते हैं और CKEDITOR.config.allowedContent = true सेट करते हैं; यह तब चीजों के साथ खिलवाड़ संपादक बंद हो जाता है।
इयान सिम्पसन

जवाबों:


284

सामग्री फ़िल्टरिंग अक्षम करना

सबसे आसान समाधान config.js और सेटिंग में जा रहा है :

config.allowedContent = true;

( ब्राउजर का कैशे क्लियर करना याद रखें )। तब CKEditor इनपुट की गई सामग्री को फ़िल्टर करना बिल्कुल बंद कर देता है। हालाँकि, यह सामग्री फ़िल्टरिंग को पूरी तरह से अक्षम कर देगा जो कि CKEditor सुविधाओं में से एक है।

कन्टैंट फ़िल्टरिंग कॉन्फ़िगर करना

आप केवल इन तत्वों, कक्षाओं, शैलियों और विशेषताओं की अनुमति देने के लिए CKEditor की सामग्री फ़िल्टर को अधिक सटीक रूप से कॉन्फ़िगर कर सकते हैं , जिनकी आपको आवश्यकता है। यह समाधान बहुत बेहतर है, क्योंकि CKEditor अभी भी बहुत सारे भद्दे HTML को हटा देगा, जो ब्राउज़र सामग्री की नकल और पेस्ट करते समय उत्पन्न करते हैं, लेकिन यह उस सामग्री को नहीं छोड़ेगा जिसे आप चाहते हैं।

उदाहरण के लिए, आप सभी div वर्गों को स्वीकार करने के लिए डिफ़ॉल्ट CKEditor के कॉन्फ़िगरेशन का विस्तार कर सकते हैं:

config.extraAllowedContent = 'div(*)';

या कुछ बूटस्ट्रैप सामान:

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

या आप तत्वों और तत्वों के dirलिए वैकल्पिक विशेषताओं के साथ विवरण सूचियों की अनुमति दे सकते हैं:dtdd

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

ये सिर्फ बहुत बुनियादी उदाहरण थे। आप सभी प्रकार के नियमों को लिख सकते हैं - आवश्यक विशेषताओं, वर्गों या शैलियों, केवल विशेष तत्वों का मिलान, सभी तत्वों का मिलान। आप सामान को हटा भी सकते हैं और पूरी तरह से CKEditor के नियमों को फिर से परिभाषित कर सकते हैं। पर और अधिक पढ़ें:


3
यह सुविधा को अक्षम कर देगा। अक्षम करने की तुलना में कॉन्फ़िगर करने के लिए बेहतर है।
ओलेक

1
@ लायन सिम्पसन: आपको अभी भी इस प्रश्न को निर्धारित करने की आवश्यकता है। समाधान खोजने के लिए Thx btw: D
जैकब वैन लिंगन

1
कभी-कभी यह समाधान काम कर रहा है, कभी-कभी यह नहीं होता है। शैली विशेषता को हटा दिया जाता है, केवल कभी-कभी, बाकी रहता है।
मशीनीडक्ट

2
मैं केंटिको नामक कुछ के साथ काम कर रहा हूं, जो इस संपादक का उपयोग करता है। मैंने "CKEDITOR.config.allowedContent = true" लाइन जोड़ी है; मेरे config.js के लिए, लेकिन यह अभी भी मेरे HTML को सुधार रहा है, जो मेरे बूटस्ट्रैप कोड को तोड़ता है, किसी को भी कोई विचार है?
टॉम बोवेन

1
सही समाधान के लिए धन्यवाद। मेरे लिए एक दिन सेवर।
सूनी

61

मुझे एक उपाय मिला।

यह फ़िल्टरिंग बंद कर देता है, यह काम कर रहा है, लेकिन एक अच्छा विचार नहीं है ...

config.allowedContent = true;

एक सामग्री स्ट्रिंग के साथ खेलने के लिए आईडी, आदि के लिए ठीक काम करता है, लेकिन वर्ग और शैली विशेषताओं के लिए नहीं, क्योंकि आपके पास () और {} वर्ग और शैली फ़िल्टरिंग के लिए है।

इसलिए मेरी शर्त संपादक में किसी भी वर्ग को अनुमति देने के लिए है:

config.extraAllowedContent = '*(*)';

यह किसी भी वर्ग और किसी भी इनलाइन शैली की अनुमति देता है।

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

किसी भी टैग के लिए केवल वर्ग = "asdf1" और वर्ग = "asdf2" की अनुमति दें:

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

(इसलिए आपको वर्णनाम निर्दिष्ट करना होगा)

केवल p टैग के लिए केवल वर्ग = "asdf" की अनुमति देने के लिए:

config.extraAllowedContent = 'p(asdf)';

किसी भी टैग के लिए आईडी विशेषता की अनुमति देने के लिए:

config.extraAllowedContent = '*[id]';

आदि आदि

शैली टैग (<शैली प्रकार = "पाठ / सीएसएस"> ... </ शैली>):

config.extraAllowedContent = 'style';

थोड़ा और अधिक जटिल होने के लिए:

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

आशा है कि यह एक बेहतर उपाय है ...


1
इस टा superberb है
Rippo

अतिरिक्तभारत के लिए ckEditor डॉक्स
डबल्यूजैक

आपके उत्तर के लिए 10 स्टार
बृजेश मवानी

अपने प्रयास के लिए यश!
मिशेल

15

संपादित करें : यह उत्तर उन लोगों के लिए है जो ड्रुपल में ckeditor मॉड्यूल का उपयोग करते हैं।

मुझे एक समाधान मिला, जिसमें ckeditor js फ़ाइल को संशोधित करने की आवश्यकता नहीं है।

यह उत्तर यहाँ से कॉपी किया गया है । सभी क्रेडिट मूल लेखक को जाने चाहिए।

"व्यवस्थापक >> कॉन्फ़िगरेशन >> CKEditor" पर जाएं; प्रोफ़ाइल के अंतर्गत, अपना प्रोफ़ाइल चुनें (उदाहरण के लिए पूर्ण)।

उस प्रोफ़ाइल को संपादित करें, और "उन्नत विकल्प >> कस्टम जावास्क्रिप्ट कॉन्फ़िगरेशन" पर जोड़ें config.allowedContent = true;

यहां छवि विवरण दर्ज करें

"प्रदर्शन टैब" के तहत कैश फ्लश करना न भूलें।


4
यह उत्तर केवल ड्रुपल के लिए है ... लेकिन वैसे भी धन्यवाद, क्योंकि मैं सिर्फ एक ड्रुपल समाधान की तलाश में था।
लार्स

1
@ लार्स दिलचस्प। मुझे याद नहीं है कि मुझे लगा कि यह सवाल ड्रुपल से संबंधित है, लेकिन ऐसा लगता है कि इसने ड्रुपल लोगों की मदद की है।
सेफर

14

CKEditor v4.1 के बाद से, आप CKEditor के config.js में यह कर सकते हैं:

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

आप अनुमत सामग्री नियमों के विस्तृत सिंटैक्स के लिए आधिकारिक दस्तावेज का उल्लेख कर सकते हैं


आपके ऊपर एक सिंटैक्स त्रुटि है। विशेष रूप से शैली की विशेषताओं को
पार्न्स

हाय kamelkev, मेरा जवाब कक्षाओं के लिए है , शैलियों के लिए नहीं , सवाल के अनुसार। असल में, यह वही है जो मैं उपयोग कर रहा हूं, और मुझे नहीं लगता कि इसमें कोई त्रुटि है।
मार्टी ज़हंग

जवाब के लिए धन्यवाद, आपकी *[id](*)चाल चली, मैंने *[id,class]पहले भी कोशिश की , लेकिन यह वर्ग की विशेषता को किसी भी तरह से अनुमति नहीं देता है। CKeditor डॉक्स एक भूलभुलैया की तरह एक सा है।
GDmac

1
+1 सामग्री नियमों को समझना संभवतः सभी फ़िल्टरिंग को अक्षम करने की तुलना में एक बेहतर समाधान है, जैसा कि अन्य उत्तरों में से कई का सुझाव है।
माइकल मार्टिन-स्मकर 16

10

यदि आप ckeditor 4.x का उपयोग कर रहे हैं, तो आप कोशिश कर सकते हैं

config.allowedContent = true;

यदि आप ckeditor 3.x का उपयोग कर रहे हैं, तो आप इस समस्या को हल कर सकते हैं ।

config.js में निम्न पंक्ति डालने का प्रयास करें

config.ignoreEmptyParagraph = false;

config.ignoreEmptyParagraph=false;एकमात्र समाधान है जो मेरे लिए काम करता है, उन सभी उत्तरों में से जो मैंने कोशिश की हैं। धन्यवाद।
स्टीफन

9

इसे ckeditor में ACF (Automatic Content Filter) कहा जाता है। सभी अनैच्छिक टैग को हम टेक्स्ट कंटेंट में उपयोग कर रहे हैं हटा दें। इस कमांड को अपने config.js फ़ाइल में प्रयोग करके इस ACK को बंद कर दें।

config.allowedContent = true;

6

कृपया आधिकारिक उन्नत सामग्री फ़िल्टर गाइड और प्लगइन एकीकरण ट्यूटोरियल देखें

इस शक्तिशाली विशेषता के बारे में आपको इससे बहुत कुछ मिलेगा। इसके अलावा config.extraAllowedContent देखें जो आपकी आवश्यकताओं के लिए उपयुक्त है।


4

यदि आप CUPditor लाइब्रेरी के साथ Drupal और "WYSIWYG" नामक मॉड्यूल का उपयोग करते हैं, तो निम्न समाधान एक समाधान हो सकता है। मेरे लिए यह एक आकर्षण की तरह काम करता है। मैं Drupal 7.33 में CKEditor 4.4.5 और WYSIWYG 2.2 का उपयोग करता हूं। मैं इस समाधान मिला: https://www.drupal.org/node/1956778

यहाँ यह है: मैं एक कस्टम मॉड्यूल बनाता हूं और ".module" फ़ाइल में निम्न कोड डालता हूं:

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

मुझे उम्मीद है कि यह अन्य Drupal उपयोगकर्ताओं की मदद करेगा।



3

CKEDITOR 4.x के लिए पूरा उदाहरण निम्नलिखित है :

एचटीएमएल

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

स्क्रिप्ट

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

उपरोक्त कोड संपादक में सभी टैग की अनुमति देगा।

अधिक विवरण के लिए: CK EDITOR अनुमत सामग्री नियम


0

मैंने पाया कि फ़िल्टर किए गए html (पाठ प्रारूप ड्रॉपडाउन में संपादक के नीचे) के बजाय पूर्ण HTML का उपयोग करने के लिए स्विच करना मेरे लिए यह समस्या तय है। अन्यथा शैली गायब हो जाएगी।


0

मैं इस config.allowedContent = true को जोड़ना चाहूंगा; ckeditor.config.js फ़ाइल में जोड़ने की आवश्यकता नहीं है। config.js, config.js ने मेरे लिए कुछ नहीं किया, लेकिन इसे ckeditor.config.js के शीर्ष क्षेत्र में जोड़कर मेरी div कक्षाएं रखीं


0

एक अन्य विकल्प यदि ड्रुपल का उपयोग करना है तो बस उस सीएसएस शैली को जोड़ना है जिसे आप उपयोग करना चाहते हैं। इस तरह यह शैली या वर्ग के नाम को नहीं मिटाता है।

इसलिए ड्रुपल 7 में सीएसएस टैब के तहत मेरे मामले में बस कुछ ऐसा जोड़ें

फेसबुक = span.icon-facebook2

यह भी जांचें कि फॉन्ट-स्टाइल बटन सक्षम है


0

मैं एक ही समस्या का सामना कर रहा हूँ क्रोम पर 4.7.1 के साथ क्रोम। बस ckeditor instReady पर pasteFilter को अक्षम करें। यह संपत्ति एडवांस सामग्री फ़िल्टर (ACF) के सभी फ़िल्टर विकल्पों को अक्षम करती है।

 CKEDITOR.on('instanceReady', function (ev) {
        ev.editor.pasteFilter.disabled = true;
    });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.