11

私は、探しているものを達成するのに以前は問題がなかった奇妙な状況にいます。次のコードは、TinyMCE リッチ テキスト ボックスをホストする HTML ページの一部です。

...
<textarea id="editing_field">This text is supposed to appear in the rich textbox</textarea>
...

最初は意図したとおりに機能し、テキストが囲まれたリッチ テキスト ボックスが作成されました。ただし、ある時点で、TinyMCE コードはテキストエリア HTML を次のように変換する必要があると判断しました。

<textarea id="editing_field" style="display: none;"/>
This text is supposed to appear in the rich textbox

これにより、テキストボックスの下にテキストがレンダリングされますが、これは理想的ではありません。この動作の変化の原因はわかりませんが、それが何らかの影響を与える可能性がある場合は、それと一緒に jQuery も使用しています。

ページが読み込まれた後、ajax を使用するか、HTML でテキストを非表示にして移動するだけで、JavaScript を使用してコンテンツをテキスト ボックスに読み込むことで問題を回避できます。ただし、可能であれば、PHP から直接テキスト ボックスにテキストを出力したいと考えています。ここで何が起こっているのか、それを修正する方法を知っている人はいますか?

更新 2:動作の変更を引き起こす状況を正常に再現しました。最初は、最初のコード スニペットのようにテキストエリアにプレーン テキストがありました。ただし、コンテンツを保存すると、テキストは次のようになります。

<p>This text is supposed to appear in the rich textbox</p>

タグの存在により、pTinyMCE は、囲んでいるテキストエリアから単一のタグであるテキストエリアへの変換をトリガーします (上図のように)。

更新 1: TinyMCE 構成ファイルを追加:

tinyMCE.init({
        // General options
        mode : "exact",
        elements : "editing_field",
        theme : "advanced",
        skin : "o2k7",
        skin_variant : "black",
        plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
        save_onsavecallback : "saveContent",

        // Theme options
        theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull", 
        theme_advanced_buttons2 : "search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,forecolor,backcolor", 
        theme_advanced_buttons3 : "hr,removeformat,|,sub,sup,|,charmap,emotions,|,print,|,fullscreen,code", 
        theme_advanced_buttons4 : "styleselect,formatselect,fontselect,fontsizeselect",
        theme_advanced_toolbar_location : "top", 
        theme_advanced_toolbar_align : "left", 
        theme_advanced_statusbar_location : "bottom", 
        theme_advanced_resizing : false,

        // Drop lists for link/image/media/template dialogs
        template_external_list_url : "lists/template_list.js",
        external_link_list_url : "lists/link_list.js",
        external_image_list_url : "lists/image_list.js",
        media_external_list_url : "lists/media_list.js",

        // Replace values for the template plugin
        template_replace_values : {
            username : "Some User",
            staffid : "991234"
        },

        width : "450",
        height : "500"
    });
4

8 に答える 8

18

tinyMCE の JavaScript 関数を呼び出さない場合は、ブラウザーの互換性の問題に対処する必要がある場合があります。

ページに tinymce ボックスが 1 つしかない場合は、次のようにします。

tinyMCE.activeEditor.setContent('<span>some</span>');

BBCode などのフォーマットも設定できます。setContentのドキュメントを確認してください。

私はあなたのPHPコードにHTMLをJavaScript関数にエコーアウトさせ、それを次のように呼び出しますonload:

function loadTinyMCE($html) {
    echo "
        <script type="text/javascript">function loadDefaultTinyMCEContent(){
             tinyMCE.activeEditor.setContent('$html');
        }</script>
    ";
}

それから

<body onload="loadDefaultTinyMCEContent()">

onloadページイベントを使用したくない場合、tinymce にはoninitと呼ばれる初期化オプションがあり、同様に機能します。

または、setupcontent_callbackを使用すると、iframe に直接アクセスできます。

于 2009-01-28T17:14:07.130 に答える
1

tinyMCE.activeEditor.setContent('some') は私のために働きます.Cheers

于 2010-12-22T12:20:16.243 に答える
1

その 2 番目の例 <textarea ... /> は空のタグ表記です。テキストをタゲの中に入れたい場合は、最初の方法 <teatarea ....>foo</textarea> のようにする必要があります

テキストエリアタグを出力しているのは何ですか? それをデバッグして、空のタグ表記を行っているかどうかを確認できますか?

エリック

于 2009-01-28T16:12:57.037 に答える
0

解決策を台無しにするエッジケースがない限り、私は問題を解決したようです。データベースに保存する前に、ページ コンテンツで次の PHP コードを使用します。

$content = str_replace(chr(10), "", $content);
$content = str_replace(chr(13), "", $content);
$content = str_ireplace('<','&#x200B;<',$content);

改行を削除し、開始タグの前にゼロ幅の非表示文字を追加します。このテキストは、後で TinyMCE が魔法をかける前に textarea タグの間に挿入されます。理由はわかりませんが、これで問題が発生せず、追加された文字が最終的な html または TinyMCE の html ビューに表示されないため、このソリューションで確認できる唯一の問題はパフォーマンス ヒットです。詳細は、開始タグのみをこのように追加する必要があるように見えますが、簡単にするために、ここではこれを考慮していません。

于 2009-01-29T13:51:32.760 に答える
-1

特定の tinymce フィールドを変更するには、次のようにします。

tinyMCE.get('editing_field').setContent('your default text');
于 2016-11-07T16:50:14.607 に答える