it-swarm-tr.com

DEĞİŞTİRİLEN metin Joomla Editor'dan nasıl alınır?

Kullanıcı belirli bir makalenin giriş metnini düzenlemek için izin veren bir sayfa var ve bunu yapmak için bu kodu kullanıyorum:

$editor = & JFactory::getEditor();
$params = array('smilies'=> '0' ,'style'  => '0' ,'layer'  => '0' ,'table'  => '0' ,'clear_entities'=>'0');
echo $editor->display('introtext',$this->introtext  , '96%', '100px', 250, 40, false, null, null, null, $params);

Sorun, jQuery/AJAX ile değişiklikleri kaydetmeye gittiğimde, yalnızca düzenleyicinin başlatıldığı orijinal HTML'ye erişebilmemdir. Geliştirirken TinyMCE editörünü kullandım, ancak kullanıcılar JCE'yi tercih ediyor, bu nedenle Google'da bulunan editöre özel cevaplar benim için hile yapmıyor.

Bir kullanıcının gönderilmek üzere kaydetmek istediği düzenlenmiş metnine nasıl ulaşılır? Bunun ya da benzerinin işe yarayacağını varsaymıştım, ancak açıkça işe yaramadı:

var newHTML = $('#introtext').val();
7
GDP

Doğru hatırlıyorsam, JCE içerik için bir iframe kullanır. Bu nedenle, önce iframe'e bir referans almanız, sonra iframe'in iç belgesine erişmeniz gerekir; bu, innerHTML'yi aradığınız metin olarak sağlayacaktır. Bunu bir kez yaptım, ama maalesef Pazar gününe kadar kodlara erişemiyorum.

Böyle bir şeyle başlardım (bunu nasıl hatırlıyorum, şu anda test edemiyorum):

var iframe = document.getElementById('jform_articletext_ifr');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
var currentText = innerDoc.innerHTML;

CurrentText öğesi "yeni" metindir.

3
elk

"GSYİH" sorusu şuydu:

"Gönderilmek için kullanıcının kaydetmek istediği düzenlenmiş metne nasıl ulaşılır?".

"elk" beni doğru yolda başlattı ama düzenlenmiş metni almak için jQuery'ye başvurdum. Ben de öyle yaptım:

jQuery ( "# Array_ifr") içeriği () bulmak ( "body") bulmak ( "p") html ()....;

Nerede "Array_ifr ", iframe the JCE editor uses. Bunu Firebug'daki unsurları inceleyerek buldum.

Bu benim için bir Joomla! ama başka hiçbir yerde sorun olduğunu düşünmüyorum. Umarım bu diğer insanlara kodlamalarında yardımcı olur.

2
Sheldon Seale

Farkında olduğum bir yöntem yok, orijinal metni saklamanız ve daha sonra gönderimde bir karşılaştırma yapmanız gerekecek.

Daha fazla ayrıntı, bu nedenle genellikle Editör Genel düzeyde ayarlanır, ancak kullanıcılar tercih ettikleri düzenleyiciyi seçmek için profillerini değiştirmeyi seçebilir.

Joomla 3.x + dönemi, Editör'ü seçilen düzenleyiciyi yükleyen bir JFormFieldEditor kullanarak yükler. Kullanıcı editörde değişiklik yapar, ancak belirttiğiniz gibi, hemen alana yansıtılmaz. Örneğin. #jform_articletext öğesi olacak bir makalede.

Ancak, öğenin kaydedildiği zamana göre çoğu düzenleyici için jform[articletext] Form öğesi güncellenmiş içeriğe sahiptir. (Bu, AJAX editörler için gördüğüm) için geçerli görünmüyor.

Sadece burada spekülasyon yapıyorum, ancak (editörler) ana forma bir submit olayı eklediklerini ve içeriklerini o noktada alana enjekte ettiklerini hayal ediyorum. Kontrol edebileceğiniz diğer yer, JCE ve TinyMCE'nin sahip olduğu "Geçiş Düzenleyici" bağlantısıdır.

Bir Makalede, TinyMCE'de "Düzenleyiciyi Değiştir" düğmesine click olay tetikleyicisi eklenmiştir:

function onclick(event) {
    tinyMCE.execCommand('mceToggleEditor', false, 'jform_articletext');
    return false;
}

Bu, editör içeriğinin #jform_articletext Alanına akıtılmasına neden olur.

Başka bir yaklaşım, etkin düzenleyiciye alanı değiştirilen metinle güncelleştirmesine neden olacak bir submit olayı göndermek olabilir.

Her düzenleyicinin submit işlemini farklı bir şekilde gerçekleştirebileceği ve hepsinde MCE'nin "Geçiş Düzenleyici" düğmesi bulunmadığı göz önüne alındığında, desteklemek istediğiniz her düzenleyici için özel bir durum oluşturmanız gerekebilir.

1
Craig

daha önce koymaya çalış

<?php echo $editor->save('introtext'); ?>
var newHTML = $('#introtext').val();

veya

var newHTML = <?php echo $editor->getContent('introtext'); ?>

böylece editördeki metin newHTML değişkenine kopyalanacaktır

tabii ki javascript kodunuz aynı php form dosyasında olmalıdır (bağımsız bir js dosyasında değil)

1

Bu konu oldukça eski ama bu başkalarına yardımcı olabilir ...

elk'in cevabı neredeyse tam olarak yerinde, sadece

var currentText = innerDoc.body.innerHTML;
0
mhall