web-dev-qa-db-ja.com

Joomlaエディターから変更されたテキストを取得する方法?

ユーザーが特定の記事のイントロテキストを編集できるページがあり、このコードを使用してユーザーが編集できるようにしています。

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

問題は、jQuery/AJAXで変更を保存しようとすると、エディターが初期化された元のHTMLにしかアクセスできないことです。私は開発中にTinyMCEエディターを使用しましたが、ユーザーはJCEを好みます。そのため、Googleで見つかったエディター固有の回答は私にとってはうまくいきません。

投稿するために、ユーザーが保存したいeditedテキストを取得するにはどうすればよいですか?私はこれまたは同様のものが機能すると想定していましたが、明らかに機能しません:

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

私の記憶が正しければ、JCEはコンテンツにiframeを使用します。したがって、まずiframeへの参照を取得してから、iframeの内部ドキュメントにアクセスする必要があります。これにより、探しているテキストとしてinnerHTMLが提供されます。私は一度これを行いましたが、残念ながら日曜日までコードにアクセスできません。

私はこのようなものから始めます(これは私がそれを覚えている方法です、今それをテストすることはできません):

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

CurrentTextは「新しい」テキストです。

3
elk

「GDP」による質問は

「投稿するために、ユーザーが保存したい編集済みテキストにどのようにアクセスしますか?」.

「elk」は正しい道を歩み始めましたが、編集されたテキストを実際に取得するためにjQueryに頼りました。これは私がやったことです:

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

ここで、「Array_ifr」はiframe the JCE editor usesのIDです。 Firebugで要素を調べて、これを見つけました。

これはJoomlaで私のために働いた!環境ですが、他の問題はないと思います。これが他の人々のコーディングに役立つことを願っています。

2
Sheldon Seale

私が知っている方法はありません。元のテキストを保存してから、送信時に比較を行う必要があります。

詳細については、通常、エディターはグローバルレベルで設定されますが、ユーザーはプロファイルを変更して好みのエディターを選択できます。

Joomla 3.x +時代は、選択したエディターをロードするJFormFieldEditorを使用してエディターをロードします。ユーザーはエディターで変更を行いますが、既に述べたように、それらはフィールドにすぐには反映されません。例えば#jform_articletext要素になる記事で。

ただし、ほとんどの編集者にとって、アイテムが保存されるまでに、フォーム要素jform[articletext]には更新されたコンテンツが含まれます。 (これはAJAXエディタには当てはまりません)。

ここでは推測しているだけですが、編集者(編集者)がsubmitイベントをメインフォームに添付し、その時点でフィールドにコンテンツを挿入すると思います。チェックできるもう1つの場所は、JCEとTinyMCEにある「Toggle Editor」リンクです。

記事では、TinyMCEには次のclickイベントトリガーが[Toggle Editor]ボタンにアタッチされています。

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

これにより、エディターのコンテンツがフィールド#jform_articletextにフラッシュされます。

別のアプローチとして、アクティブなエディターにsubmitイベントを送信して、変更されたテキストでフィールドを更新できるようにすることが考えられます。

各エディターがsubmitの処理を異なる方法で実装でき、それらすべてにMCEの[Toggle Editor]ボタンがない場合、サポートしたいエディターごとに特別なケースを作成する必要があります。

1
Craig

直前に置こう

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

または

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

したがって、エディターからのテキストはnewHTML変数にコピーされます

もちろん、JavaScriptコードは同じphpフォームファイルにある必要があります(スタンドアロンのjsファイルではありません)

このスレッドはかなり古いですが、これは他の人を助けるかもしれません...

elkの返答はほぼ正確に当てはまりますが、変更する必要がありました。

var currentText = innerDoc.body.innerHTML;
0
mhall