it-swarm-id.com

Bagaimana cara mengambil teks yang diubah dari Joomla Editor?

Saya memiliki halaman yang memungkinkan pengguna untuk mengedit teks intro dari artikel tertentu, dan saya menggunakan kode ini untuk memungkinkan mereka melakukannya:

$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);

Masalahnya adalah ketika saya pergi untuk menyimpan perubahan dengan jQuery/AJAX, saya hanya dapat mengakses HTML asli yang diinisialisasi oleh editor. Saya menggunakan editor TinyMCE sambil mengembangkan, tetapi pengguna lebih suka JCE, jadi jawaban khusus editor yang ditemukan dengan Google tidak melakukan trik untuk saya.

Bagaimana cara mendapatkan teks diedit yang ingin disimpan pengguna, untuk diposkan? Saya berasumsi bahwa ini, atau yang serupa, akan berhasil, tetapi jelas tidak:

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

Jika saya ingat benar, JCE menggunakan iframe untuk konten. Dengan demikian, Anda perlu mendapatkan referensi ke iframe terlebih dahulu, kemudian mengakses dokumen bagian dalam iframe, yang akan memberikan innerHTML sebagai teks yang Anda cari. Saya melakukan ini sekali, tetapi sayangnya saya tidak dapat mengakses kode sampai hari Minggu.

Saya akan mulai dengan sesuatu seperti ini (ini adalah bagaimana saya mengingatnya, tidak dapat mengujinya sekarang):

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

Dengan currentText menjadi teks "baru".

3
elk

Pertanyaan oleh "GDP" adalah

"Bagaimana cara mendapatkan teks yang diedit yang ingin disimpan oleh pengguna, untuk diposkan ?.

"rusa" membuat saya mulai di jalur yang benar, tetapi saya menggunakan jQuery untuk benar-benar mendapatkan teks yang diedit. Inilah yang saya lakukan:

jQuery ("# ​​Array_ifr"). content (). find ("body"). find ("p"). html ();

Di mana "Array_ifr "adalah id dari iframe the JCE editor uses. Saya menemukan ini dengan memeriksa elemen-elemen dengan Firebug.

Ini bekerja untuk saya di Joomla! lingkungan tapi saya tidak melihatnya menjadi masalah di orang lain. Semoga ini bisa membantu orang lain dengan coding mereka.

2
Sheldon Seale

Tidak ada metode yang saya ketahui, Anda harus menyimpan teks asli dan kemudian melakukan perbandingan pengiriman.

Lebih detail, jadi umumnya Editor diatur pada tingkat Global tetapi pengguna dapat memilih untuk mengubah profil mereka untuk memilih editor pilihan mereka.

Joomla 3.x + era memuat Editor menggunakan JFormFieldEditor yang memuat editor yang dipilih. Pengguna membuat perubahan di editor tetapi seperti yang Anda perhatikan, mereka tidak langsung tercermin ke bidang. misalnya dalam sebuah artikel yang akan menjadi #jform_articletext elemen.

Namun untuk sebagian besar editor pada saat item disimpan, elemen form jform[articletext] memiliki konten yang diperbarui. (Ini sepertinya tidak berlaku untuk editor AJAX yang pernah saya lihat).

Saya hanya berspekulasi di sini, tapi saya membayangkan mereka (editor) melampirkan acara submit ke formulir utama dan menyuntikkan kontennya ke dalam bidang pada saat itu. Tempat lain yang bisa Anda periksa adalah tautan "Toggle Editor" yang dimiliki JCE dan TinyMCE.

Dalam sebuah Artikel, TinyMCE memiliki ini klik pemicu acara terlampir pada tombol "Toggle Editor":

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

Yang menyebabkan konten editor memerah ke lapangan #jform_articletext.

Pendekatan lain mungkin dengan mengirim acara submit ke editor aktif yang diharapkan menyebabkannya memperbarui bidang dengan teks yang diubah.

Mengingat bahwa setiap editor dapat mengimplementasikan penanganan submit dengan cara yang berbeda dan tidak semuanya memiliki tombol "Toggle Editor" MCE, Anda mungkin harus membuat kasing khusus untuk setiap editor yang ingin Anda dukung.

1
Craig

cobalah untuk menempatkan sebelum

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

atau

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

jadi teks dari editor akan disalin ke variabel newHTML

tentu saja kode javascript Anda harus dalam file form php yang sama (bukan dalam file js mandiri)

Utas ini cukup lama tetapi ini mungkin membantu orang lain ...

balasan rusa hampir persis tepat, kecuali bahwa saya harus mengubahnya

var currentText = innerDoc.body.innerHTML;
0
mhall