TinyMCE-ON / OFFトグルスイッチの追加
質問
Magento管理セクションのテキスト領域でTinyMCEを使用しています。 TinyMCEエディターは最初から表示されていますが、それを無効/再有効にするオプションが必要です。
jQueryプラグインバージョンを使用しているので、スクリプトを追加しましたが、ほとんど機能しています。ただし、TinyMCEの最初のインスタンスのみに影響します。ページ上に他のインスタンスが存在する場合、それらは影響を受けません。
この例を使用しました http://tinymce.moxiecode.com/examples/example_23.php これまでにやったことのベースとして。しかし、それが最初のインスタンスのみに影響を与えている理由はまだわかりません。何か案は?これが私のコードです:
var $j = jQuery.noConflict();
// Add ON OFF toggle switch
$j(function() {
$j('textarea').after("<br/><span class=\"toggle form-button\">Toggle TinyMCE</span>");
$j("span.toggle").toggle(function(){
$j('.wrapper').find('textarea').tinymce().hide();
}, function () {
$j('.wrapper').find('textarea').tinymce().show();
});
});
解決
textarea:eq(0)、textarea:eq(1)など、個別のテキスト領域ごとにスクリプトを繰り返しても問題なく動作します。理由はわかりませんが、動作します。
更新:
tinymceサイトでjQueryの表示/非表示の例を使用する方法は、実際には機能しません。単にエディターを非表示にする代わりに、実際にそれをアンロードしてから再ロードする必要があります。フォームの送信時に状態は保存されません。したがって、次のようなことを行う必要があります。
$(function() {
var id = 'tinytextareaID'; // ID of your textarea (no # symbol)
$("a.toggle").toggle(function(){
tinyMCE.execCommand('mceRemoveControl', false, id);
}, function () {
tinyMCE.execCommand('mceAddControl', false, id);
});
});
他のヒント
TinyMCEバージョン4.xをお探しの場合は、次を使用できます。
tinymce.EditorManager.execCommand('mceToggleEditor', true, textarea_id);
それが誰かを助けることができる場合、同じページに複数のtinymceインスタンスがあったときにjqueryヘルパーで正しく動作しなかったと言えます。実際、「init once」で作業する機会を失うことになるため、これにjqueryを使用する意味があるかどうかはわかりません。 tinymceが可能にする方法論。そのため、トグルを処理する関数をいくつか作成しました。
function showBlogEditor(strItemId){
var theeditor = tinyMCE.get(strItemId); //strItemId is the ID of the HTML element
if(theeditor && theteditor.initialized){
//you can do something here if you need
}else{
tinyMCE.execCommand('mceAddControl', false, strItemId);
}
}
function hideBlogEditor(strItemId){
if (tinyMCE.getInstanceById(strItemId))
{
tinyMCE.execCommand('mceFocus', false, strItemId);
tinyMCE.execCommand('mceRemoveControl', false, strItemId);
}
}
また、jqueryヘルパーの使用を停止して、次のように初期化および初期化しました。
/* it is the mode: "none" that matters here. You are initializing the tinymce object without creating a visual manifestation of it. Then the show and hide functions will turn the control on and off */
tinyMCE.init({
theme : "advanced",mode : "exact",
mode : "none",
plugins : strplgns,
theme_advanced_buttons1 : strbtns1,
theme_advanced_buttons2 : strbtns2,
theme_advanced_buttons3 : strbtns3,
content_css : "/css/hlsl.css"
});
本当に、jqueryで動作させようとして無駄になった後、tinymceオブジェクトを直接使用しています。 initは一度呼び出されるだけなので、すべてのエディターが同じように見えて動作します。
ページで、バニラHTML 'textarea'とtinymceエディターを切り替えます。私はtinymce 4を使用します。上記のレシピはバージョン4ではもう機能しません。どちらの場合でも送信時にtextareaコンテンツを失わないために、私はこの解決策を見つけました:
<script>
function toggle_tinymce_checkbutton(checkButtonId,strItemId){
var toggle = $('#'+checkButtonId); // checkButtonId = id of checkbutton w/o #
if(toggle.attr('value') == 'on') {
var editor = tinymce.EditorManager.get(strItemId); // strItemId = id of textarea w/o #
editor.remove();
toggle.attr('value','off');
} else {
var editor = tinymce.EditorManager.createEditor(strItemId,tinymce_settings);
editor.render();
toggle.attr('value','on');}
}
</script>
'tinymce_settings'は、エディタオプションの辞書です:
<script>
tinymce_settings = {
selector: '#cm_pages_body',
height: 300,
width:767,
statusbar: false,
convert_urls: false,
valid_children: '+body[style]',
plugins: [
'advlist autolink lists link image charmap print preview anchor',
'searchreplace visualblocks code fullscreen',
'insertdatetime media table contextmenu paste code',
'textcolor',
],
toolbar: 'undo redo | styleselect | bold italic | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link code',
content_css: [
'//fast.fonts.net/cssapi/e6dc9b99-64fe-4292-ad98-6974f93cd2a2.css',
'//www.tinymce.com/css/codepen.min.css'
],};
</script>