ti-enxame.com

Como recuperar o texto ALTERADO do Joomla Editor?

Eu tenho uma página que permite ao usuário editar o texto de introdução de um artigo específico e estou usando este código para permitir que eles façam isso:

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

O problema é que, quando vou salvar as alterações com o jQuery/AJAX, só consigo acessar o HTML original com o qual o editor foi inicializado. Eu usei o editor TinyMCE durante o desenvolvimento, mas os usuários preferem o JCE; portanto, respostas específicas do editor encontradas no Google não são suficientes para mim.

Como chegar ao texto editado que o usuário deseja salvar para ser publicado? Eu tinha assumido que isso, ou similar, funcionaria, mas claramente não:

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

Se bem me lembro, o JCE usa um iframe para o conteúdo. Portanto, você precisa obter uma referência ao iframe primeiro e acessar o documento interno do iframe, que fornecerá o innerHTML como o texto que você está procurando. Eu fiz isso uma vez, mas infelizmente não posso acessar o código até domingo.

Eu começaria com algo assim (é assim que me lembro, não posso testá-lo agora):

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

Com currentText sendo o "novo" texto.

3
elk

A questão do "PIB" foi

"Como se chega ao texto editado que o usuário deseja salvar para ser publicado ?.

"elk" me levou ao caminho certo, mas recorri ao jQuery para obter o texto editado. Isto é o que eu fiz:

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

Onde "Array_ifr "é o ID do iframe the JCE editor uses. Encontrei isso examinando os elementos com o Firebug.

Isso funcionou para mim em um Joomla! ambiente, mas não vejo problema em nenhum outro. Espero que isso ajude outras pessoas com sua codificação.

2
Sheldon Seale

Não tenho conhecimento de nenhum método, você precisará armazenar o texto original e fazer uma comparação na submissão.

Mais detalhes, geralmente o Editor é definido em um nível Global, mas os usuários podem optar por alterar seu perfil para selecionar seu editor preferido.

O Joomla 3.x + era carrega o Editor usando um JFormFieldEditor que carrega o editor selecionado. O usuário faz alterações no editor, mas como você observou, elas não são refletidas no campo imediatamente. por exemplo. em um artigo que seria o #jform_articletext elemento.

No entanto, para a maioria dos editores no momento em que o item é salvo, o elemento do formulário jform[articletext] tem o conteúdo atualizado. (Isso parece não se aplicar aos editores AJAX que eu já vi)).

Estou apenas especulando aqui, mas imagino que eles (os editores) anexem um evento submit ao formulário principal e injetem seu conteúdo no campo nesse momento. O outro lugar que você pode verificar é o link "Toggle Editor" que o JCE e o TinyMCE possuem.

Em um artigo, o TinyMCE possui este clique gatilho de evento anexado ao botão "Editor de alternância":

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

O que faz com que o conteúdo dos editores seja liberado no campo #jform_articletext.

Outra abordagem pode ser enviar um evento submit para o editor ativo, esperançosamente, fazendo com que ele atualize o campo com o texto alterado.

Dado que cada editor pode implementar o tratamento do submit de uma maneira diferente e nem todos eles têm o botão "Toggle Editor" do MCE, você pode precisar criar um caso especial para cada editor que deseja oferecer suporte.

1
Craig

tente colocar logo antes

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

ou

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

para que o texto do editor seja copiado para essa variável newHTML

é claro que seu código javascript deve estar no mesmo arquivo de formulário php (não em um arquivo js independente)

1
Gregory Palchikovsky

Este tópico é bastante antigo, mas pode ajudar outras pessoas ...

a resposta de elk é quase exatamente exata, exceto que eu tive que modificar para

var currentText = innerDoc.body.innerHTML;
0
mhall