ユーザーが特定の記事のイントロテキストを編集できるページがあり、このコードを使用してユーザーが編集できるようにしています。
$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();
私の記憶が正しければ、JCEはコンテンツにiframeを使用します。したがって、まずiframeへの参照を取得してから、iframeの内部ドキュメントにアクセスする必要があります。これにより、探しているテキストとしてinnerHTMLが提供されます。私は一度これを行いましたが、残念ながら日曜日までコードにアクセスできません。
私はこのようなものから始めます(これは私がそれを覚えている方法です、今それをテストすることはできません):
var iframe = document.getElementById('jform_articletext_ifr');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
var currentText = innerDoc.innerHTML;
CurrentTextは「新しい」テキストです。
「GDP」による質問は
「投稿するために、ユーザーが保存したい編集済みテキストにどのようにアクセスしますか?」.
「elk」は正しい道を歩み始めましたが、編集されたテキストを実際に取得するためにjQueryに頼りました。これは私がやったことです:
jQuery( "#Array_ifr")。contents()。find( "body")。find( "p")。html();
ここで、「Array_ifr
」はiframe the JCE editor uses
のIDです。 Firebugで要素を調べて、これを見つけました。
これはJoomlaで私のために働いた!環境ですが、他の問題はないと思います。これが他の人々のコーディングに役立つことを願っています。
私が知っている方法はありません。元のテキストを保存してから、送信時に比較を行う必要があります。
詳細については、通常、エディターはグローバルレベルで設定されますが、ユーザーはプロファイルを変更して好みのエディターを選択できます。
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]ボタンがない場合、サポートしたいエディターごとに特別なケースを作成する必要があります。
直前に置こう
<?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;