it-swarm-es.tech

¿Cómo recuperar el texto CAMBIADO del Editor de Joomla?

Tengo una página que permite al usuario editar el texto de introducción de un artículo en particular, y estoy usando este código para permitirles que lo hagan:

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

El problema es que cuando voy a guardar los cambios con jQuery/AJAX, solo puedo acceder al HTML original con el que se inicializó el editor. Utilicé el editor TinyMCE durante el desarrollo, pero los usuarios prefieren JCE, por lo que las respuestas específicas del editor que se encuentran con Google no me funcionan.

¿Cómo se llega al texto editado que el usuario desea guardar para poder publicarlo? Supuse que esto, o similar, funcionaría, pero claramente no:

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

Si lo recuerdo bien, JCE usa un iframe para el contenido. Por lo tanto, primero debe obtener una referencia al iframe, luego acceder al documento interno del iframe, que proporcionará innerHTML como el texto que está buscando. Lo hice una vez, pero desafortunadamente no puedo acceder al código hasta el domingo.

Comenzaría con algo como esto (así es como lo recuerdo, no puedo probarlo ahora):

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

Con currentText siendo el texto "nuevo".

3
elk

La pregunta por "PIB" era

"¿Cómo se llega al texto editado que el usuario desea guardar para poder publicarlo?.

"elk" me ayudó a comenzar por el camino correcto, pero recurrí a jQuery para obtener el texto editado. Esto es lo que hice:

jQuery ("# ​​Array_ifr"). contenido (). find ("cuerpo"). find ("p"). html ();

Dónde "Array_ifr "es el id de la iframe the JCE editor uses. Encontré esto al examinar los elementos con Firebug.

Esto funcionó para mí en un Joomla! entorno, pero no veo que sea un problema en ningún otro. Espero que esto ayude a otras personas con su codificación.

2
Sheldon Seale

No conozco ningún método, tendrá que almacenar el texto original y luego hacer una comparación al enviarlo.

Más detalles, por lo que, en general, el Editor se configura en un nivel Global, pero los usuarios pueden elegir modificar su perfil para seleccionar su editor preferido.

La era de Joomla 3.x + carga el Editor usando un JFormFieldEditor que carga el editor seleccionado. El usuario realiza cambios en el editor pero, como ha notado, no se reflejan en el campo de inmediato. p.ej. en un artículo que sería el #jform_articletext elemento.

Sin embargo, para la mayoría de los editores, cuando se guarda el elemento, el elemento de formulario jform[articletext] tiene el contenido actualizado. (Esto no parece aplicarse a los editores AJAX que he visto).

Solo estoy especulando aquí, pero imagino que ellos (los editores) adjuntan un evento submit al formulario principal e inyectan sus contenidos en el campo en ese punto. El otro lugar que puede consultar es el enlace "Toggle Editor" que tienen JCE y TinyMCE.

En un artículo, TinyMCE tiene este clic activador de evento adjunto al botón "Toggle Editor":

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

Lo que hace que el contenido de los editores se vacíe al campo #jform_articletext.

Otro enfoque puede ser enviar un evento submit al editor activo con la esperanza de que actualice el campo con el texto modificado.

Dado que cada editor podría implementar el manejo de submit de una manera diferente y no todos tienen el botón "Toggle Editor" de MCE, es posible que deba crear un caso especial para cada editor que desee admitir.

1
Craig

intenta poner justo antes

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

o

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

entonces el texto del editor se copiará en esa variable newHTML

por supuesto, su código javascript debe estar en el mismo archivo de formulario php (no en un archivo js independiente)

1

Este hilo es bastante antiguo, pero esto podría ayudar a otros ...

la respuesta de elk es casi exactamente acertada, excepto que tuve que modificar para

var currentText = innerDoc.body.innerHTML;
0
mhall