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


7

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

$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で見つかったエディター固有の回答は私にとってはうまくいきません。

投稿するためにユーザーが保存したい編集済みテキストにどのように到達しますか?私はこれまたは同様のものが機能すると想定していましたが、明らかに機能しません:

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

1
人々はそれを気に入っているようで、私は本当にJCEのテストを始める必要があります。余談ですが(Joomla 1.5を使用していない場合)、&以前は必要ありませんJFactory。JCEは、変更されたコンテンツを取得できる「API」内に何かを提供していませんか?彼らのサポートが無料かどうかわからないが、尋ねる価値があるかもしれない
Lodder

@Lodder PHP5を使用している場合、&以前は必要ありませんJFactory-これは必ずしもJoomlaの特定のバージョンに関連しているとは思いません(1.5未満がPHP5で機能しない可能性があるという事実は別として)?joomla.stackexchange.com/questions/411/...
MrWhite

@ w3d-そうです。私がそこで何を考えていたのかわからない
Lodder 2014年

良い点....カット/ペーストの価格....私が実際に'03年以来新しいコード行を書いたかどうかはわかりません、笑
GDP

回答:


3

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

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

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

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


これはTinyMCEの場合もそうであるので、さらに調査する必要がありますが、悲しいかな、この知識なしにコードをやり直さなければならなかったため、検証できません。しかし、方向をありがとう-これを追求し、確認する人からの連絡に興味があります!
GDP

2

「GDP」による質問は

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

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

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

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

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


これは単一の段落に対して機能します。それ以上のテキストがある場合(いくつかの段落やその他のタグ)、最後の「.find( 'p')」をドロップします。これにより、すべてのコンテンツが返されます。
Sheldon Seale 2017年

1

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

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

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

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

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

記事では、TinyMCEの[クリックトリガー]ボタンに次のクリックイベントトリガーが追加されています。

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

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

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

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


1
何との比較?OPが新しく編集されたテキストにまったくアクセスできないようですか?
MrWhite 2014年

私の悪いことに、想定される知識に基づいてあまりにも単純な応答を発しました。基本的に、各エディターは異なるJavascriptアプリケーションです。Joomlaは、エディターが接続されているフィールドが送信時に更新されることを期待します。
クレイグ

1

直前に置こう

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

または

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

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

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


1
投稿する前にこのコードをテストしましたか?(そうでない場合は、将来の研究者がソリューションをシームレスに実装できるように、可能な限りこれを習慣にしてください)newHTMLphpが提供する値を引用符で囲む必要はありませんか?
mickmackusa

0

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

elkの返答はほぼ正確に当てはまりますが、

var currentText = innerDoc.body.innerHTML;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.