CKEditor উদাহরণটি ইতিমধ্যে বিদ্যমান


99

আমি ফর্ম উপস্থাপনের জন্য jquery ডায়ালগ ব্যবহার করছি (AJAX মাধ্যমে আনা)। কিছু ফর্মগুলিতে আমি টেক্সারিয়াসের জন্য একটি সি কেইডিটর ব্যবহার করছি। সম্পাদক প্রথম লোডে সূক্ষ্ম প্রদর্শন করে।

যখন ব্যবহারকারী ডায়ালগটি বাতিল করে দেয়, আমি সামগ্রীগুলি সরিয়ে দিচ্ছি যাতে পরবর্তী অনুরোধে সেগুলি তাজা লোড করা হয়। বিষয়টি হ'ল একবার ডায়লগটি পুনরায় লোড হয়ে গেলে, সেকেইডিটর দাবি করেন যে সম্পাদক ইতিমধ্যে বিদ্যমান।

uncaught exception: [CKEDITOR.editor] The instance "textarea_name" already exists.

এপিআইতে বিদ্যমান সম্পাদকদের ধ্বংস করার জন্য একটি পদ্ধতি অন্তর্ভুক্ত রয়েছে এবং আমি লোকেদের এটি সমাধান বলে দাবি করতে দেখেছি:

if (CKEDITOR.instances['textarea_name']) {
CKEDITOR.instances['textarea_name'].destroy();
}
CKEDITOR.replace('textarea_name');

এটি আমার পক্ষে কাজ করছে না, কারণ পরিবর্তে আমি একটি নতুন ত্রুটি পেয়েছি:

TypeError: Result of expression 'i.contentWindow' [null] is not an object.

এই ত্রুটিটি "প্রতিস্থাপন ()" না করে "ধ্বংস ()" এ ঘটেছে বলে মনে হচ্ছে। কেউ কি এর অভিজ্ঞতা পেয়েছে এবং এর থেকে আলাদা সমাধান খুঁজে পেয়েছে?

বিদ্যমান সম্পাদককে ধ্বংস করে প্রতিস্থাপনের পরিবর্তে কী এটি পুনরায় রেন্ডার করা সম্ভব?

আপডেট করা একই সমস্যাটি মোকাবেলা করার জন্য এখানে আরও একটি প্রশ্ন রয়েছে তবে তিনি ডাউনলোডযোগ্য পরীক্ষার কেস সরবরাহ করেছেন

উত্তর:


101

এটি কাজ করার জন্য উদাহরণটি ধ্বংস করার সময় আপনার বুলিয়ান প্যারামিটারটি সত্য করতে হবে :

    var editor = CKEDITOR.instances[name];
    if (editor) { editor.destroy(true); }
    CKEDITOR.replace(name);

4
"সত্য" বিকল্পগুলি সমস্ত পার্থক্য করে। এটিও উল্লেখযোগ্য যে নীচে প্রদত্ত "CKEDITOR.remove (উদাহরণ)" উত্তরটি কোনও ভাল সমাধান নয় কারণ এটি একটি অভ্যন্তরীণ এপিআই যা ত্রুটিও তৈরি করতে পারে, উদাহরণস্বরূপ ব্যবহার করা ভাল (সত্য)
বালা ক্লার্ক

আপনাকে ধন্যবাদ, এই সত্য আমাকে সাহায্য।
অসম্পূর্ণ

6
ধন্যবাদ জানাতে চাই! আমি পছন্দ করি কিভাবে স্ট্যাক ওভারফ্লো সর্বদা একটি অনুসন্ধানের মাধ্যমে আমার সমস্ত সমস্যা সমাধান করে।
টমমি ফোর্সট্রাম

4
এই উত্তরটি তাই কার্যকর, আমি অবাক হয়েছি এটি এখানে এত গভীরভাবে সমাধিস্থ করা হয়েছে।
পেটর ভোস্টরেল

4
তাদের প্রাপ্ত ভোটের সংখ্যা অনুসারে উত্তরগুলি বাছাই করার একটি বিকল্প থাকা উচিত ছিল .. সুতরাং সেরা উত্তরগুলি শীর্ষে আসবে।
শশী কাঁথ

28
function loadEditor(id)
{
    var instance = CKEDITOR.instances[id];
    if(instance)
    {
        CKEDITOR.remove(instance);
    }
    CKEDITOR.replace(id);
}

এটি আমাকে কিছুটা শোকের কারণ করেছিল, তবে আপনার সমাধানটি সাহায্য করেছিল। ধন্যবাদ!
বেন শিমিরমেন

ফায়ারফক্সে আমার একইরকম সমস্যা ছিল যার পৃষ্ঠায় সিকেইডিটারের তিনটি দৃষ্টান্ত ছিল, প্রথমটি প্রদর্শিত হচ্ছে না তবে অন্য দুটি যেখানে আমি উপরের কোডটি যুক্ত করেছি এবং সমস্ত তেহ সম্পাদকরা এখন উপস্থিত রয়েছে
ক্রেগ অ্যাঙ্গাস

18
CKEDITOR.rem ব্যবহার করবেন না কারণ এটি কেবল অ্যারে থেকে উপাদানটি সাফ করে, তবে সমস্ত ডিওএম মেমরিতে ফেলে leaves এটি দস্তাবেজগুলিতে বলা হয়েছে যে এটি অভ্যন্তরীণ ব্যবহারের জন্য বোঝানো হয়েছে: ডকস.এস.এস.এস.এস.সি.সি.সি.ডি.পি.সি.সি.এম.বি.এল / সি.কে.ডি.টি.এস.টি.এম.টি.এম.এল.ম্যুভ.আপনার পরিবর্তে ইনস্ট্যাস.ডেস্ট্রয় () ব্যবহার করা উচিত যেমন মাধবীদ্দনকি বলেছেন।
আলফোনসএমএল

4
একই পরিস্থিতি জুড়ে দৌড়ে এবং যেমনটি উল্লেখ করা হয়েছে, এই উত্তরটি ভুল। ধ্বংস () ব্যবহার করে এবং প্রকৃত প্যারামিটারটি পাস করা অবশেষে আমার জন্য কাজ করেছিল যা নীচে উল্লিখিত হয়েছে।
ম্যাথাচিউ

19

আমারও এই সমস্যা ছিল, তবে আমি এটিকে অনেক সহজ উপায়ে সমাধান করেছি ...

আমি আমার jQuery স্ক্রিপ্টে "ckeditor" ক্লাসটি নির্বাচক হিসাবে ব্যবহার করছিলাম যার জন্য আমি টেক্সারিয়াস CKEditor এর জন্য ব্যবহার করতে চাই। ডিফল্ট ckeditor জেএস স্ক্রিপ্ট CKEditor জন্য কোন টেক্সারিয়াস ব্যবহার করতে হবে তা সনাক্ত করতে এই বর্গটি ব্যবহার করে।

এর অর্থ আমার jQuery স্ক্রিপ্ট এবং ডিফল্ট ckeditor স্ক্রিপ্টের মধ্যে দ্বন্দ্ব রয়েছে।

আমি কেবল টেক্সারিয়া এবং আমার jQuery স্ক্রিপ্টের ক্লাসটি 'do_ckeditor' এ পরিবর্তন করেছি (আপনি "ckeditor" ব্যতীত অন্য কোনও কিছু ব্যবহার করতে পারেন) এবং এটি কার্যকর হয়েছিল।


ধন্যবাদ, হ্যাঁ "অটো" সেকিডিটরিজিং আমার সাথেও গণ্ডগোল করছে। আরো দেখুন stackoverflow.com/a/3631391/923817
D.Tate

11

এটি আমার পক্ষে কাজ করা সবচেয়ে সহজ (এবং একমাত্র) সমাধান:

if(CKEDITOR.instances[editorName])
   delete CKEDITOR.instances[editorName];
CKEDITOR.replace(editorName);

অ্যারেতে এই এন্ট্রি মুছে ফেলা আপনার অ্যাপ্লিকেশনটি ধ্বংস করতে এই ফর্ম সুরক্ষা চেককে বাধা দেয়।

ধ্বংস () এবং সরান () আমার জন্য কাজ করে না।


4
এটিই একমাত্র সমাধান যা আমার সাথে কাজ করেছিল, এটি পোস্ট করার জন্য ধন্যবাদ!
মাইকেল রবিনসন

আমি কাজ করতে ধ্বংস () পেয়েছিলাম। তবে সম্পাদকীয় উদাহরণটি সম্পূর্ণরূপে deleteবা destroy()সম্পূর্ণরূপে পরিষ্কার করা যায় না। অভিধান এবং অন্যান্য সম্পর্কিত বস্তুর মতো জিনিসগুলি এখনও চারপাশে লুকিয়ে থাকবে।
অ্যাডু

আমি উদাহরণস্বরূপ চেষ্টা করেছি (সত্য), কিন্তু এটি আমার পক্ষে কার্যকর হয়নি it কিন্তু এই আমার জন্য কাজ করে। কেউ দয়া করে আমাকে বলতে পারেন, এর কোনও পার্শ্ব প্রতিক্রিয়া আছে কি?
মনজিৎ

7

সম্ভবত এটি আপনাকে সাহায্য করবে - আমি জকিউরি ব্যবহার করে অনুরূপ কিছু করেছি, আমি অজানা সংখ্যক সাইকিডিটর অবজেক্টগুলি লোড করছি। এতে হোঁচট খেতে আমার কিছুটা সময় লেগেছিল - ডকুমেন্টেশনে এটি পরিষ্কার নয়।

function loadEditors() {
    var $editors = $("textarea.ckeditor");
    if ($editors.length) {
        $editors.each(function() {
            var editorID = $(this).attr("id");
            var instance = CKEDITOR.instances[editorID];
            if (instance) { instance.destroy(true); }
            CKEDITOR.replace(editorID);
        });
    }
}

এবং সম্পাদকদের কাছ থেকে সামগ্রী পেতে আমি এখানে যা চালাচ্ছি:

    var $editors = $("textarea.ckeditor");
    if ($editors.length) {
        $editors.each(function() {
            var instance = CKEDITOR.instances[$(this).attr("id")];
            if (instance) { $(this).val(instance.getData()); }
        });
    }

আপডেট : আমি সঠিক উত্তরটি ব্যবহার করতে আমার উত্তর পরিবর্তন করেছি - যা .ডাস্ট্রয় ()। .remove () বলতে অভ্যন্তরীণ বোঝানো হয় এবং এক পর্যায়ে এটি ভুলভাবে নথিভুক্ত হয়।


এটি ত্রুটিগুলি সরিয়ে নিয়েছে বলে মনে হয়, তবে দ্বিতীয় রেন্ডারিংয়ে এখন টেক্সারিয়ায় 'নাল' রয়েছে এবং আমি আর এই সরঞ্জামদণ্ড বা টেক্সারিয়াটির সাথে ইন্টারঅ্যাক্ট করতে পারছি না। আমি যদি সরঞ্জামদণ্ডের বোতামগুলিতে ক্লিক করি তবে আমি ত্রুটিগুলি পেয়েছি যেমন: "প্রকারের ত্রুটি: অভিব্যক্তির ফলাফল 'এটি focus। । $ '[অপরিবর্তিত] কোনও বস্তু নয় "। আপনি কোথায় / কখন এই ফাংশন কল করবেন? আমার স্ক্রিপ্টটি জ্যাকুরির বোঝা সামগ্রীর সাথে ইনলাইন রয়েছে। (প্যারেন্ট এইচটিএমএল এর মাথায়
ckeditor.js

সমস্ত টেক্সেরিয়াস পৃষ্ঠায় যুক্ত হওয়ার পরে এবং সামগ্রীতে ভরাট হওয়ার পরে আমি এটিকে ডাকছি।
স্কটE

5

আমি একই ধরণের সমস্যা পেয়েছি যেখানে অজ্যাক্সের মাধ্যমে বোঝানো সামগ্রীর জন্য আমরা সি কেডিটারের বেশ কয়েকটি উদাহরণ তৈরি করছিলাম।

CKEDITOR.remove ()

মেমরিতে ডিওএম রাখে এবং সমস্ত বাইন্ডিং সরিয়ে দেয় না।

CKEDITOR.instance [উদাহরণ_id] .ডাস্ট্রয় ()

আই কন্টেন্ট উইন্ডো ত্রুটি দিয়েছেআমি যখনই থেকে নতুন ডেটা সহ নতুন উদাহরণ তৈরি করি ত্রুটি দিয়েছে। তবে এটি কেবল তখনই আমি বুঝতে পারছিলাম না যে আমি ডিওএম সাফ করার পরে উদাহরণটি ধ্বংস করছি।

উদাহরণটি ব্যবহার করার সময় ধ্বংস () ব্যবহার করুন এবং এটির ডম পৃষ্ঠায় উপস্থিত রয়েছে, তবে এটি পুরোপুরি সূক্ষ্মভাবে কাজ করে।


5

এজ্যাক্স অনুরোধগুলির জন্য,

 for(k in CKEDITOR.instances){
    var instance = CKEDITOR.instances[k];
    instance.destroy()
 }
  CKEDITOR.replaceAll();

এই স্নিপড ডকুমেন্ট থেকে সমস্ত দুরত্ব সরিয়ে দেয়। তারপরে নতুন নজির তৈরি করে।



3

i.contentWindow is nullত্রুটিটি ঘটতে যখন কলিং একজন সম্পাদক উদাহরণস্বরূপ যে DOM একটি পাঠ্য এলাকা থেকে বাঁধা ছিল আর উপর ধ্বংস বলে মনে হয়।

CKEDITORY.destroyএকটি প্যারামিটার লাগে noUpdate

এপিআইডোক বলেছেন:

উদাহরণটি যদি কোনও ডিওএম উপাদান প্রতিস্থাপন করে থাকে তবে এই প্যারামিটারটি উপাদান সামগ্রীর সাথে উপাদানটি আপডেট করতে হবে কিনা তা নির্দেশ করে।

সুতরাং, ত্রুটিটি এড়ানোর জন্য, হয় ডিওএম থেকে টেক্সারিয়া উপাদানটি সরিয়ে নেওয়ার আগে কলটি কল করুন বা অস্তিত্বহীন ডিওএম উপাদান আপডেট করার চেষ্টা এড়াতে গন্তব্য (সত্য) কল করুন।

if (CKEDITOR.instances['textarea_name']) {
   CKEDITOR.instances['textarea_name'].destroy(true);
}

(jQuery অ্যাডাপ্টারের সাথে সংস্করণ 3.6.2 ব্যবহার করে)



2
CKEDITOR.instances = new Array();

আমি আমার কলগুলির উদাহরণ তৈরি করার আগে এটি ব্যবহার করছি (প্রতি পৃষ্ঠার লোডগুলি)। নিশ্চিত নয় যে এটি কীভাবে মেমরি পরিচালনা করতে প্রভাবিত করে এবং কী নয়। এটি কেবল তখনই কাজ করবে যদি আপনি কোনও পৃষ্ঠায় সমস্ত দৃষ্টান্ত প্রতিস্থাপন করতে চান।


4
আমি এই পৃষ্ঠার সমস্ত সমাধান চেষ্টা করেছি ... আমার পরিবেশের জন্য, এটি কেবলমাত্র একমাত্র কাজ করেছে (তবে আমার ie9 শুধুমাত্র এফএফটিতে সঠিকভাবে কাজ করেনি) ... কেন অন্যরা 1 ঘন্টা পরে নয় তা নিশ্চিত নন পরীক্ষার এবং ত্রুটির বিষয়ে, এটিই আমার জন্য কাজ করা একমাত্র সমাধান। এই অ্যান্ড্রু পোস্ট করার জন্য ধন্যবাদ।
রোনডোগ

2

আমি উপরের সমস্ত কোডের উপর ভিত্তি করে আমার নিজস্ব সমাধান প্রস্তুত করেছি।

      $("textarea.ckeditor")
      .each(function () {

                var editorId = $(this).attr("id");

                try {    
                    var instance = CKEDITOR.instances[editorId];
                    if (instance) { instance.destroy(true); }

                }
                catch(e) {}
                finally {
                    CKEDITOR.replace(editorId);
                }
            });

এটি আমার পক্ষে পুরোপুরি কাজ করে।

কখনও কখনও এজেএক্স অনুরোধের পরেও ভুল ডোম কাঠামো থাকে। ইনস্ট্যাসের জন্য:

<div id="result">
   <div id="result>
   //CONTENT
   </div>
</div>

এটি পাশাপাশি সমস্যা সৃষ্টি করবে এবং ckEditor কাজ করবে না। সুতরাং নিশ্চিত হয়ে নিন যে আপনার সঠিক DOM কাঠামো আছে।


2

উদাহরণগুলির সাথে আমার একই সমস্যা ছিল, আমি সর্বত্র খুঁজছিলাম এবং অবশেষে এই বাস্তবায়ন আমার পক্ষে কাজ করে:



    //set my instance id on a variable

    myinstance = CKEDITOR.instances['info'];

    //check if my instance already exist

    if (myinstance) { 
        CKEDITOR.remove(info)
    }

    //call ckeditor again

    $('#info').ckeditor({
        toolbar: 'Basic',
        entities: false,
        basicEntities: false
    });


2

আপনি ckeditor এর পদ্ধতি সরানোর মাধ্যমে যে কোনও ckeditor দুরত্ব সরাতে পারেন। তদন্তের আইডি বা পাঠ্যের নাম হবে।

if (CKEDITOR.instances[instance_name]) {
    CKEDITOR.remove(CKEDITOR.instances[instance_name]);
}

1

প্রকৃতপক্ষে, আপনার কোড থেকে ".ckeditor" শ্রেণিটি সরানো সমস্যার সমাধান করে। আমরা বেশিরভাগ সিকিডিটারের ডকুমেন্টেশন থেকে jQuery ইন্টিগ্রেশন উদাহরণ অনুসরণ করেছি:

$('.jquery_ckeditor')
.ckeditor( function() { /* callback code */ }, { skin : 'office2003' } );

এবং ভেবেছিলাম "... সম্ভবত আমি কেবল মুক্তি পেতে পারি বা '.jquery_' অংশ" পেতে পারি।

আমি কলব্যাক ফাংশনটি টিকেট করতে আমার সময় নষ্ট করছি (কারণ {ত্বক: 'অফিস2003'} আসলে কাজ করেছিল), অন্যত্র থেকে সমস্যাটি আসছিল।

আমি মনে করি ডকুমেন্টেশনে উল্লেখ করা উচিত যে ক্লাসের নাম হিসাবে "ckeditor" ব্যবহারের প্রস্তাব দেওয়া হয়নি, কারণ এটি একটি সংরক্ষিত কীওয়ার্ড।

চিয়ার্স


1

আমি এটা শিখেছি

CKEDITOR.inferences [editName] মুছুন;

নিজেই, প্রকৃতপক্ষে সরানো হয়েছে। আমি অন্যান্য সমস্ত পদ্ধতি যা পড়েছি এবং দেখেছি, তার ব্যবহারকারীর কাছ থেকে স্ট্যাকওভারফ্লোতে এখানে যা পাওয়া গিয়েছিল, সেগুলি আমার পক্ষে কার্যকর হয়নি।

আমার পরিস্থিতিতে, আমি একটি এজ্যাক্স কল ব্যবহার করছি এবং এর সামগ্রীতে মোড়ানো সামগ্রীর অনুলিপিটি টানতে। সমস্যাটি হ'ল কারণ আমি একটি jQuery। লাইভ ইভেন্টটি একটি "এই দস্তাবেজ সম্পাদনা করুন" লিঙ্কটি আবদ্ধ করতে ব্যবহার করছি এবং তারপরে এজাক্স লোডের সাফল্যের পরে ckeditor উদাহরণটি প্রয়োগ করছি। এর অর্থ হ'ল আমি যখন অন্য লিঙ্কটিকে অন্য একটি লাইভ ইভেন্টের সাথে একটি লিঙ্কে ক্লিক করি তখন অবশ্যই মুছে ফেলা উইন্ডোজ সাফ করার (ফর্মটি ধরে রাখার) কাজটির অংশ হিসাবে আমার অবশ্যই মুছে ফেলা CKEDITOR.inferences [editName] ব্যবহার করতে হবে, তারপরে পুনরায় আনার বিষয়বস্তু রাখা ডাটাবেস বা অন্যান্য সংস্থান।


1

আমি jQuery ডায়ালগ দিয়ে একই সমস্যা আছে।

আপনি যদি কেবল পূর্ববর্তী ডেটা মুছতে চান তবে উদাহরণটি কেন ধ্বংস করবেন?

function clearEditor(id)
{
  var instance = CKEDITOR.instances[id];
  if(instance)
  {
    instance.setData( '' );
  }
}

1

আমি ধ্বংস / প্রতিস্থাপনের পরিবর্তে সমস্ত দৃষ্টান্তের নাম পরিবর্তন করে বেছে নিয়েছি - যেহেতু কখনও কখনও এজেএক্স লোড হওয়া ঘটনাটি পৃষ্ঠার মূল অংশটিতে সত্যিকার অর্থে প্রতিস্থাপন করে না ... র‌্যামে আরও রাখে, তবে এইভাবে কম সংঘাত হয়।

    if (CKEDITOR && CKEDITOR.instances) {
        for (var oldName in CKEDITOR.instances) {
            var newName = "ajax"+oldName;
            CKEDITOR.instances[newName] = CKEDITOR.instances[oldName];
            CKEDITOR.instances[newName].name = newName;
            delete CKEDITOR.instances[oldName];
        }
    }

1

আমি সেই পরিস্থিতিতে আছি যেখানে আমাকে সেই স্পন কথোপকথনগুলি নিয়ন্ত্রণ করতে হবে, তাদের প্রত্যেকেরই এই সংলাপগুলির মধ্যে একটি সেকিডিটার থাকা দরকার to এবং এটি ঠিক তাই টেক্সট অঞ্চল একই আইডি ভাগ করে। (সাধারণত এটি অত্যন্ত খারাপ অনুশীলন, তবে আমার কাছে ২ টি জেকিগ্রিড রয়েছে, একটি বরাদ্দকৃত আইটেমগুলির মধ্যে একটি এবং অপরকে না পাঠানো আইটেমের অন্যটি)) তারা প্রায় অভিন্ন কনফিগারেশন ভাগ করে নেয়। সুতরাং, আমি উভয় কনফিগার করার জন্য সাধারণ কোড ব্যবহার করছি।

সুতরাং, আমি যখন কোনও ডায়ালগ লোড করি, সারি যুক্ত করার জন্য, বা এডিট করার জন্য, উভয়ই জেকিগ্রিড থেকে; আমি অবশ্যই সমস্ত টেক্সেরিয়ায় CKEDITOR এর সমস্ত দৃষ্টান্ত সরিয়ে ফেলব।

$('textarea').each(function()
{
    try 
    {
        if(CKEDITOR.instances[$(this)[0].id] != null)
        {
            CKEDITOR.instances[$(this)[0].id].destroy();
        }
    }
    catch(e)
    {

    }
});

এটি সমস্ত পাঠ্যজগতের উপরে লুপ করবে এবং যদি সেখানে কোনও সিকিডেটর উদাহরণ থাকে, তবে এটি ধ্বংস করুন।

বিকল্পভাবে যদি আপনি খাঁটি jQuery ব্যবহার করেন:

$('textarea').each(function()
{
    try 
    {
        $(this).ckeditorGet().destroy();
    }
    catch(e)
    {

    }
});

1

অপসারণ করুন class="ckeditor", এটি সাইকিডেটর ইনিশিয়েশন হতে পারে


0

আমার একই সমস্যা ছিল যেখানে আমি নাল রেফারেন্স ব্যতিক্রম পেয়েছি এবং সম্পাদকটিতে "নাল" শব্দটি প্রদর্শিত হবে। আমি সম্পাদককে 3.4.1 এ আপগ্রেড করা সহ কয়েকটি মুখ্য সমাধান চেষ্টা করেছি।

আমি উত্সটি সম্পাদনা করে শেষ করেছি। _সোর্স \ প্লাগইনস ys উইসিউইগ্যারি \ প্লাগইন.জেজে প্রায় 416 থেকে 426 লাইনে, এর মতো স্নিপেট রয়েছে:

iframe = CKEDITOR.dom.element.createFromHtml( '&lt;iframe' + ... + '></iframe>' );

কমপক্ষে এফএফ-তে, প্রয়োজনের সময়কালে ইফ্রাম পুরোপুরি ইনস্ট্যান্ট হয় না। আমি সেই লাইনের পরে বাকি ফাংশনটিকে একটি সেটটাইমআউট ফাংশন দিয়ে ঘিরে ফেলেছি:

iframe = CKEDITOR.dom.element.createFromHtml( '<iframe' + ... + '></iframe>' );
setTimeout(function()
{ 
    // Running inside of Firefox chrome the load event doesn't bubble like in a normal page (#5689)
    ...
}, 1000);

};

// The script that launches the bootstrap logic on 'domReady', so the document
...

মডেল সংলাপগুলিতে পাঠ্যটি ধারাবাহিকভাবে রেন্ডার করে।


0

ডাইনামিক (অ্যাজাক্স) ফর্মগুলির লোডিং (এর মধ্যে পৃষ্ঠার রিফ্রেশ ছাড়াই) সমর্থন করতে যাতে একই (একই ফর্মটিকে আবার বলা হয়) বা বিভিন্ন আইডির (পূর্বে লোড করা ফর্ম) সহ টেক্সারিয়াস থাকে এবং সেগুলি সি কেএডিটর উপাদানগুলিতে রূপান্তর করি যা আমি নিম্নলিখিতগুলি করেছি (জ্যাকিউরি ব্যবহার করে) অ্যাডাপ্টার):

পৃষ্ঠাটি প্রতিটি অজ্যাক্স কলটি শেষ হওয়ার পরে একটি টেক্সেরিয়া রূপান্তরিত করার জন্য সরবরাহ করে, আমি নিম্নলিখিত ফাংশনে একটি কল করব:

setupCKeditor()

এটি এর মতো দেখায় (এটি আপনার টেক্সারিয়াসকে আরটিই'র ক্লাস = "আপনার সি কে ক্লাস" এ রূপান্তরিত বলে ধরে নেয় ):

    /* Turns textAreas into TinyMCE Rich Text Editors where
 * class: tinymce applied to textarea.
 */
function setupCKeditor(){

    // define editor configuration      
    var config = {skin : 'kama'};

    // Remove and recreate any existing CKEditor instances
    var count = 0;
    if (CKEDITOR.instances !== 'undefined') {
        for(var i in CKEDITOR.instances) {

            var oEditor   = CKEDITOR.instances[i];
            var editorName = oEditor.name;

             // Get the editor data.
            var data = $('#'+editorName).val();

            // Check if current instance in loop is the same as the textarea on current page
            if ($('textarea.yourCKClass').attr('id') == editorName) {
                if(CKEDITOR.instances[editorName]) {

                    // delete and recreate the editor
                    delete CKEDITOR.instances[editorName];
                    $('#'+editorName).ckeditor(function() { },config);
                    count++;

                }
            }   


        }
    }

    // If no editor's exist in the DOM, create any that are needed.             
    if (count == 0){

        $('textarea.yourCKClass').each( function(index) {

                var editorName = $(this).attr('id');
                $('#'+editorName).ckeditor(function() { $('#'+editorName).val(data); },config);

            });

    }


}

আমার লাইনটি উল্লেখ করা উচিত:

$('#'+editorName).ckeditor(function() { $('#'+editorName).val(data); },config);

(এবং হওয়া উচিত) সহজভাবে হতে পারে:

$('#'+editorName).ckeditor(function() { },config);

তবে আমি দেখতে পেলাম যে সম্পাদক প্রায়শই লোড হওয়ার পরে একটি সেকেন্ডের জন্য সঠিক সামগ্রীটি প্রদর্শন করে এবং সেগুলি পছন্দসই সামগ্রীর সম্পাদককে খালি করে দেয়। সুতরাং কলব্যাক কোড সহ সেই লাইনটি সিকেইডিটর সামগ্রীটিকে উত্সাহী টেক্সেরিয়া সামগ্রীর মতো হতে বাধ্য করে। ব্যবহারের সময় ঝাঁকুনির কারণ ঘটায়। আপনি যদি এটি ব্যবহার এড়াতে পারেন তবে তাই করুন ..


0

আমার ঠিক জ্যাকবোবার্গের মতো একই সমস্যা ছিল। আমি জিকিউরি ডায়ালগগুলিতে ডায়নামিক ফর্ম লোডিং ব্যবহার করছিলাম তারপরে বিভিন্ন উইজেট সংযুক্ত করে (ডেটপিকারস, সিডিসিটার ইত্যাদি ...)। এবং আমি উপরে উল্লিখিত সমস্ত সমাধান চেষ্টা করেছিলাম, তাদের মধ্যে কেউই আমার পক্ষে কাজ করেনি।

কোনও কারণে ckeditor শুধুমাত্র প্রথমবারের সাথে আমি ফর্মটি সংযুক্ত করেছি, দ্বিতীয়বার আমি ঠিক একই ত্রুটি বার্তাটি জ্যাকববার্গকে পেয়েছি।

আমি আমার কোডটি বিশ্লেষণ করেছি এবং আবিষ্কার করেছি যে আপনি যদি "মধ্য-বায়ুতে" সেকিডিটারটি সংযুক্ত করেন তবে ফর্মের বিষয়বস্তুটি এখনও ডায়ালগের মধ্যে না রাখে, সেকিডিটার সঠিকভাবে তার বাঁধন সংযুক্ত করবে না। যেহেতু সেকিডিটারটি "মিড-এয়ার" এ সংযুক্ত থাকে, দ্বিতীয়বার আপনি "মিড-এয়ার" এ সংযুক্ত করেন ... পোওফ ... প্রথম বারটি ডিওএম থেকে সঠিকভাবে সরানো না হওয়ায় একটি ত্রুটি নিক্ষেপ করা হয়।

এটিই আমার কোড যা ত্রুটিটি প্রবর্তন করেছিল:

var $content = $(r.content); // jQuery can create DOM nodes from html text gotten from <xhr response> - so called "mid-air" DOM creation
$('.rte-field',$content).ckeditor(function(){});
$content.dialog();

এটি ঠিক করা কাজ করে:

var $content = $(r.content).dialog(); // first create dialog
$('.rte-field',$content).ckeditor(function(){}); // then attach ckeditor widget

0

আমি এই ঠিক একই জিনিসটিতে দৌড়েছি এবং সমস্যাটি হ'ল ওয়ার্ডকাউন্ট প্লাগইনটি আরম্ভ হতে খুব বেশি সময় নিচ্ছিল। 30+ সেকেন্ড। ব্যবহারকারী সেকিডিটার প্রদর্শন করা ভিউতে ক্লিক করবেন, তারপরে বাতিল করুন, যার ফলে অ্যাজাক্স-ডোমটিতে একটি নতুন পৃষ্ঠা লোড করা হবে। প্লাগইনটি অভিযোগ করছিল কারণ আইফ্রেমে বা যা কিছু বিষয়বস্তু উইন্ডো দেখিয়েছে এটি কন্টেন্ট উইন্ডোতে নিজেকে যুক্ত করতে প্রস্তুত হওয়ার পরে আর দৃশ্যমান ছিল না। আপনি আপনার ভিউতে ক্লিক করে এবং তারপরে ওয়ার্ড কাউন্টটি সম্পাদকের নীচে ডানদিকে প্রদর্শিত হওয়ার জন্য এটি যাচাই করতে পারেন। আপনি যদি এখনই বাতিল করেন তবে আপনার কোনও সমস্যা হবে না। আপনি যদি এটির জন্য অপেক্ষা না করেন, আপনি আইকন্টেন্ট উইন্ডোটি নাল ত্রুটিযুক্ত পেয়েছেন। এটি ঠিক করতে, কেবল প্লাগইনটি স্ক্র্যাপ করুন:

if (CKEDITOR.instances['textarea_name']) 
{
   CKEDITOR.instances['textarea_name'].destroy();
}
CKEDITOR.replace('textarea_name', { removePlugins: "wordcount" } );

যদি আপনার কোনও শব্দের পাল্টা প্রয়োজন হয় তবে শব্দের গণনা করে এমন একটি ফাংশন দিয়ে সম্পাদকের কাছে পেস্ট এবং কীআপ ইভেন্টগুলির জন্য নিবন্ধ করুন।


0

যারা jquery "অ্যাডাপ্টার" ব্যবহার করে এবং সমস্যায় পড়েছেন (যেমনটি আমি ছিলাম), তেমনি সুপার হ্যাকিশ তবুও কাজের সমাধানটি হ'ল এই জাতীয় কিছু করা:

// content editor plugin
(function($){
    $.fn.contentEditor = function( params ) {
        var xParams = $.extend({}, $.fn.contentEditor.defaultParams, params);
        return this.each( function() {   
            var $editor = $(this);
            var $params = $.extend({}, xParams, $editor.data());

            // if identifier is set, detect type based on identifier in $editor
            if( $params.identifier.type ) {
                $params.type = $editor.find($params.identifier.type).val();
            }

            $editor.data('type', $params.type);

            // edit functionality
            editButton = $('<button>Edit Content</button>').on('click',function(){
                // content container
                var $cc = $('#' + $editor.data('type'));

                // editor window
                var $ew = $('<form class="editorWindow" />');
                $ew.appendTo('body');

                // editor content
                $ec = $('<textarea name="editorContent" />').val($cc.html());
                $ec.appendTo($ew);
                $ec.ckeditor();


                //$ec.ckeditorGet().setMode('source');


                $ew.dialog({
                    "autoOpen": true,
                    "modal": true,
                    "draggable": false,
                    "resizable": false,
                    "width": 850,
                    "height": 'auto',
                    "title": "Content Editor",
                    "buttons": { 
                        'Save': function() {                            
                            $cc.html( $ec.val() );
                            $ec.ckeditorGet().destroy(); 
                            $ew.remove();
                        },
                        'Cancel / Close': function() { 

                            $ec.ckeditorGet().destroy();                        
                            $ew.remove();
                        }
                    },
                    'close': function() {
                        $ec.ckeditorGet().destroy(); 
                    },
                    'open': function() {
                        $ew.find('a.cke_button_source').click();

                        setTimeout(function(){
                            $ew.find('a.cke_button_source.cke_on').click();
                        }, 500);
                    }
                });

                return false;
            });

            editButton.appendTo( $editor );

        });
    }

    // set default option values
    $.fn.contentEditor.defaultParams = {
        'identifier': {
            'type': 'input[name="type"]'
        }
    };   

})(jQuery);   

$(function(){

    $('form.contentEditor').contentEditor();

});

এই অংশটি হ'ল মূল বিষয়:

                'open': function() {
                    $ew.find('a.cke_button_source').click();

                    setTimeout(function(){
                        $ew.find('a.cke_button_source.cke_on').click();
                    }, 500);
                }

পরের বার আপনি যখন ডায়লগটি খুলবেন তখন সম্পাদকীয় পাঠ্যটি দৃশ্যমান না হওয়ায় এটি সমস্যার সমাধান করে। আমি বুঝতে পারি এটি খুব হ্যাকশিড, তবে এগুলির বেশিরভাগটি অ্যাডমিন সরঞ্জামগুলির জন্য ব্যবহৃত হবে তা বিবেচনা করে আমি মনে করি না যে এটি সাধারণভাবে যতটা উদ্বেগ হবে তত বড় উদ্বেগ .. এবং এটি কাজ করে, তাই আশা করি এটি কাউকে বাঁচাবে সময়;)


0

এটি jquery। লোড () এপিআই এবং কোকেডিটরের পুরোপুরি কাজ করার কোড, আমার ক্ষেত্রে আমি কিছু জেকোরি প্রভাব সহ কোকডিটর সহ একটি পৃষ্ঠা লোড করছি। আমি আশা করি এটা তোমাকে সাহায্য করবে।

 $(function() {
            runEffect = function(fileload,lessonid,act) {
            var selectedEffect = 'drop';
            var options = {};
            $( "#effect" ).effect( selectedEffect, options, 200, callback(fileload,lessonid,act) );
        };
        function callback(fileload,lessonid,act) {
            setTimeout(function() {//load the page in effect div
                $( "#effect" ).load(fileload,{lessonid:lessonid,act:act});
                 $("#effect").show( "drop", 
                          {direction: "right"}, 200 );
                $("#effect").ajaxComplete(function(event, XMLHttpRequest, ajaxOptions) {
                    loadCKeditor(); //call the function after loading page
                });
            }, 100 );   
        };

        function loadCKeditor()
        {//you need to destroy  the instance if already exist
            if (CKEDITOR.instances['introduction']) 
            {
                CKEDITOR.instances['introduction'].destroy();
            }
            CKEDITOR.replace('introduction').getSelection().getSelectedText();
        }
    });

===================== button for call the function ================================

<input type="button" name="button" id="button" onclick="runEffect('lesson.php','','add')" >

0

এটি বেশ সহজ। আমার ক্ষেত্রে, আমি নীচের jquery পদ্ধতিটি চালিয়েছি যা কোনও পৃষ্ঠা লোড চলাকালীন ckeditor দৃষ্টান্তগুলি ধ্বংস করে দেবে। এটি কৌশলটি করেছে এবং সমস্যার সমাধান করেছে -

JQuery পদ্ধতি -

function resetCkEditorsOnLoad(){

    for(var i in CKEDITOR.instances) {
        editor = CKEDITOR.instances[i];
            editor.destroy();
            editor = null;
    }
}

$(function() {

            $(".form-button").button();
    $(".button").button();

    resetCkEditorsOnLoad(); // CALLING THE METHOD DURING THE PAGE LOAD

            .... blah.. blah.. blah.... // REST OF YOUR BUSINESS LOGIC GOES HERE

       });

এটাই. আমি এটি আপনাকে সাহায্য করে আশা করি।

চিয়ার্স, সিরিশ


0

এই ফাংশনগুলি সি কেইডিটর সংস্করণ 4.4.5 এ আমার জন্য কাজ করে, এতে কোনও মেমরি ফাঁস হয় না

 function CKEditor_Render(CkEditor_id) {
        var instance = CKEDITOR.instances[CkEditor_id];
        if (CKEDITOR.instances.instance) {
            CKEDITOR.instances.instance.destroy();
        }
        CKEDITOR.replace(CkEditor_id);
    }

// নীচে হিসাবে এই ফাংশন কল

var id = 'ckeditor'; // Id of your textarea

CKEditor_Render(id);

0

CKeditor 4.2.1

এখানে অনেক উত্তর রয়েছে তবে আমার জন্য আমার আরও কিছু দরকার ছিল (কিছুটা নোংরা তাই কেউ যদি উন্নতি করতে পারেন তবে দয়া করে করুন)। আমার জন্য মডেলগুলি যেখানে আমার সমস্যা।

আমি ফাউন্ডেশন ব্যবহার করে একটি মডেলে সিকেইডিটার রেন্ডার করছিলাম। আদর্শভাবে আমি সম্পাদককে বন্ধ করার পরে ভাগ্যছাড়া করে দিতাম, তবে আমি ফাউন্ডেশনের সাথে গোলযোগ করতে চাইনি।

আমি মুছে ফেলা ডাকলাম, আমি অপসারণ এবং অন্য একটি পদ্ধতি চেষ্টা করেছিলাম তবে শেষ পর্যন্ত এটিই স্থায়ী হয়েছিল।

আমি টেক্সারিয়া ব্যবহার করছিলাম ডিআইভিগুলি না পপুলেট করার জন্য।

আমার সমাধান

//hard code the DIV removal (due to duplication of CKeditors on page however they didn't work)

    $("#cke_myckeditorname").remove();


     if (CKEDITOR.instances['myckeditorname']) {
                delete CKEDITOR.instances['myckeditorname'];
                CKEDITOR.replace('myckeditorname', GetCKEditorSettings());
            } else {
                CKEDITOR.replace('myckeditorname', GetCKEditorSettings());
            }

এটি আমার নির্দিষ্ট ফর্ম্যাটিংটি ফিরিয়ে দেওয়ার জন্য আমার পদ্ধতি ছিল যা আপনি নাও চান।

    function GetCKEditorSettings()
    {
       return {
                    linkShowAdvancedTab: false,
                    linkShowTargetTab: false,
                    removePlugins: 'elementspath,magicline',
                    extraAllowedContent: 'hr blockquote div',
                    fontSize_sizes: 'small/8px;normal/12px;large/16px;larger/24px;huge/36px;',
                    toolbar: [
                        ['FontSize'],
                        ['Bold', 'Italic', 'Underline', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink'],
                        ['Smiley']
                    ]
                };
    }

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.