0

私はTinyMCEとドラッグ&ドロップ画像アップロードがうまく機能しています。私はimages_upload_url: 'handler.php'を指定し、データを受け取って適切に処理するハンドラを作成しました。TinyMCE画像アップロードオーバーライドimages_upload_handler

しかし、イメージがページにドロップされた時点で、クライアント側からhandler.phpに動的に渡したい1つの追加のパラメータが1つあります。

独自のimages_upload_handler関数を記述することで、独自の関数をロールバックすることができます。これで十分ですが、私はむしろ簡単にするために既存のTinyMCEを使用したいと思います。私はどうやら動的にimages_upload_urlを動的に変更して、デフォルトのimages_upload_handler関数が実行される直前にGETパラメータ(たとえば?foo = bar)を動的に追加できる方法があるのだろうかと疑問に思っていましたか?または、images_upload_handlerのために私自身の関数を指定する方法がありますが、その後、デフォルトの 'parent' TinyMCE関数を直後に呼び出しますか?

tinyMCE.init({ 
    selector: 'textarea', 
    images_upload_url: 'handler.php', 
    images_upload_handler: function (blobInfo, success, failure) { 
     // change images_upload_url to handler.php?foo=bar 
     // call default TinyMCE images_upload_handler function. 
    } 
}) 

または代わりに、むしろ直接images_upload_handlerを上書きするよりも、私は画像の上にドロップされた後にフックすることができます関数やイベントがある:私は(ちょうどモックアップ/アイデアのように)このようなものを考えていますimages_upload_handlerが起動する前に、

編集:

I動的ようinit_instance_callbackイベントにimages_upload_urlを設定する別のアプローチを試みた:

images_upload_url: 'handler.php', 
init_instance_callback : function(ed) { 
    ed.settings.images_upload_url += '?foo=bar'; 
    console.log('changed images_upload_url to: ' + ed.settings.images_upload_url); 
} 

その場合にconsole.logが実際に変更「handler.phpを出力しますか? foo = bar '、それは実際にイメージをアップロードすることになるが、それはhandler.phpに戻る - 正しく変更されていないようだ?

答えて

0

エディタが初期化されたら、設定を変更することはできません... init_instance_callbackを使用しようとすると、エディタが初期化されても値を変更できないため、失敗しています。

JavaScript変数として追加する必要があるデータを注入してから、実際のinitオブジェクトにその変数を使用させてください。たとえば:

var urlParams = <?php echo $urlParamsAsAString ?> 
tinyMCE.init({ 
    selector: 'textarea', 
    images_upload_url: 'handler.php' + urlParams, 
    . 
    . 
    . 
}) 

この例では、PHPを使用して、あなたが(例えば'?foo=bar')必要な文字列が含まれています$ urlParamsAsAStringという名前の変数を持っていることを前提としています。あなたは確かに任意のサーバー側の言語で同じことを行うことができます。

これにより、各ページの読み込みで右のパラメータが何であるかを判断することができます。また、TinyMCEを初期化するときにその変数が定義されている限り、正しく付加されます。

EDIT/NOTE:各ページのリロード時にinitをロードしない単一ページアプリケーションを使用している場合は、構成の詳細を変更するたびに、remove()init()が必要です。

+0

ありがとうございました。私はこのアプローチを試しましたが、私のアプリは1ページのアプリです。各画面の読み込み/変更はjsによって制御され、最初のinitはアプリケーションの最初のPHPページのロード時に1回だけ起動されます(1回だけ発生します)。したがって、このアプローチを試みると、最初のロード時に変数が正しくロードされますが、各javascript画面が変更されると、js側で変更される新しい動的変数で更新されません。 これは、パフォーマンスの理由から、各ページの変更時にinitを呼び出す必要がないように行われました。 – Manachi

+0

その場合は、この値を変更するたびにエディタを削除して再初期化する必要があります。 –

+0

私はそれを避けることを望んでいましたが、そのようになり、各ページの変更でエディタを再初期化し、これまでのところうまく動作しているようです。 技術的には私が行ったフォローアップのコメントだったにもかかわらず、私は答えをチェックしました。しかし、あなたの答えは、初期設定後に設定を変更できないことを確認することによっても助けられました。私はそれを使って壁に頭を打つのをやめました。あなたの助けをありがとう:) – Manachi

関連する問題