it-swarm-eu.dev

Come recuperare il testo CAMBIATO dall'editor Joomla?

Ho una pagina che consente all'utente di modificare il testo introduttivo di un particolare articolo e sto usando questo codice per consentire loro di farlo:

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

Il problema è che quando vado a salvare le modifiche con jQuery/AJAX, posso solo accedere all'HTML originale con cui è stato inizializzato l'editor. Ho usato l'editor TinyMCE durante lo sviluppo, ma gli utenti preferiscono JCE, quindi le risposte specifiche dell'editor trovate con Google non fanno al caso mio.

Come si arriva al testo modificato che l'utente vuole salvare per essere pubblicato? Avevo supposto che questo, o simile, avrebbe funzionato, ma chiaramente non:

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

Se ricordo bene, JCE utilizza un iframe per il contenuto. Pertanto, è necessario prima ottenere un riferimento all'iframe, quindi accedere al documento interno dell'iframe, che fornirà il codice HTML interno come testo che si sta cercando. L'ho fatto una volta, ma sfortunatamente non riesco ad accedere al codice fino a domenica.

Vorrei iniziare con qualcosa del genere (è così che me lo ricordo, non posso provarlo adesso):

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

Con currentText è il "nuovo" testo.

3
elk

La domanda di "PIL" era

"Come si arriva al testo modificato che l'utente vuole salvare per essere pubblicato ?.

"elk" mi ha fatto iniziare sulla strada giusta ma ho fatto ricorso a jQuery per ottenere effettivamente il testo modificato. Questo è quello che ho fatto:

jQuery ( "# Array_ifr") contenuti () trovare ( "corpo") trovare ( "p") html ()....;

Dove "Array_ifr "è l'id di iframe the JCE editor uses. Ho trovato questo esaminando gli elementi con Firebug.

Questo ha funzionato per me in un Joomla! ambiente ma non vedo che sia un problema in nessun altro. Spero che questo aiuti altre persone con la loro codifica.

2
Sheldon Seale

Non sono a conoscenza di alcun metodo, dovrai archiviare il testo originale e fare un confronto al momento dell'invio.

Maggiori dettagli, quindi generalmente l'editor è impostato a livello globale ma gli utenti possono scegliere di modificare il proprio profilo per selezionare l'editor preferito.

Joomla 3.x + era carica l'editor usando un JFormFieldEditor che carica l'editor selezionato. L'utente apporta modifiche nell'editor ma, come hai notato, non si riflettono immediatamente sul campo. per esempio. in un articolo che sarebbe il #jform_articletext elemento.

Tuttavia, per la maggior parte degli editor in base al tempo in cui l'elemento viene salvato, l'elemento del modulo jform[articletext] ha il contenuto aggiornato. (Questo non sembra applicarsi ai AJAX).

Sto solo speculando qui, ma immagino che (i redattori) allegino un evento submit al modulo principale e in quel momento iniettino il loro contenuto nel campo. L'altro posto che potresti controllare è il link "Toggle Editor" di JCE e TinyMCE.

In un articolo, TinyMCE ha questo click trigger di evento associato al pulsante "Toggle Editor":

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

Il che fa sì che il contenuto degli editor venga scaricato nel campo #jform_articletext.

Un altro approccio potrebbe essere quello di inviare un evento submit all'editor attivo, facendolo sperare che possa aggiornare il campo con il testo modificato.

Dato che ogni editor potrebbe implementare la gestione di submit in un modo diverso e non tutti hanno il pulsante "Toggle Editor" di MCE, potrebbe essere necessario creare un caso speciale per ciascun editor che si desidera supportare.

1
Craig

prova a mettere poco prima

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

o

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

quindi il testo dell'editor verrà copiato in quella variabile newHTML

ovviamente il tuo codice javascript deve essere nello stesso file di modulo php (non in un file js autonomo)

Questo thread è piuttosto vecchio ma questo potrebbe aiutare gli altri ...

la risposta di Elk è quasi esattamente esatta, tranne per il fatto che ho dovuto modificare

var currentText = innerDoc.body.innerHTML;
0
mhall