1

http://tinymcedeluxe.codeplex.com/にあるすべてのガイドラインに従いました

テーマフォルダの下に次のResourceManifest.csファイルを作成しました。

using Orchard.UI.Resources;

namespace TinyMceDeluxe {
    public class ResourceManifest : IResourceManifestProvider {
        public void BuildManifests(ResourceManifestBuilder builder) {
            var manifest = builder.Add();
            manifest.DefineScript("OrchardTinyMce")
                .SetUrl("orchard-tinymce.js")
                .SetDependencies("TinyMce")
                .SetVersion("3.4.8"); 
        }
    }
}

Layout.cshtmlファイルに次の行を追加しました。

Script.Require("OrchardTinyMce").AtFoot();

そして、orcard.tinymce.jsファイルをテーマのスクリプトフォルダーにコピーしました。

Firebugを使用して確認できるため、正しいファイルがロードされます。問題は、使用するプラグインのコメントを外すとすぐに、TinyMCEエディターのコマンドが消えてしまうことです。例えば:

////
//// Un-comment-out the tinymce.PluginManager.load commands for the plugins you want to use:
tinymce.PluginManager.load('advhr', '/Modules/TinyMceDeluxe/Scripts/plugins/advhr/editor_plugin.js');
//tinymce.PluginManager.load('advimage', '/Modules/TinyMceDeluxe/Scripts/plugins/advimage/editor_plugin.js');
//tinymce.PluginManager.load('advlink', '/Modules/TinyMceDeluxe/Scripts/plugins/advlink/editor_plugin.js');
//tinymce.PluginManager.load('advlist', '/Modules/TinyMceDeluxe/Scripts/plugins/advlist/editor_plugin.js');
...

advhrプラグインのコメントを外すと、TinyMCEエディターが表示されません。もう一度コメントすると、完璧に表示されます。単一のプラグインは機能しません。そのうちの1つをコメント解除するとすぐに、TinyMCE.init呼び出しで使用しなくても、機能しません。標準のinitである次のinitを使用しても:

tinyMCE.init({
    theme: "advanced",
    mode: "specific_textareas",
    editor_selector: "tinymce",
    plugins: "fullscreen,autoresize,searchreplace,mediapicker",
    theme_advanced_toolbar_location: "top",
    theme_advanced_toolbar_align: "left",
    theme_advanced_buttons1: "search,replace,|,cut,copy,paste,|,undo,redo,|,mediapicker,|,link,unlink,charmap,emoticon,codeblock,|,bold,italic,|,numlist,bullist,formatselect,|,code,fullscreen",
    theme_advanced_buttons2: "",
    theme_advanced_buttons3: "",
    convert_urls: false,
    valid_elements: "*[*]",
    // shouldn't be needed due to the valid_elements setting, but TinyMCE would strip script.src without it.
    extended_valid_elements: "script[type|defer|src|language]"
});

何か間違ったことをしたかどうかはわかりません。パッケージをダウンロードして解凍し、TinyMceDeluxeフォルダーをOrchard.Web\Modulesフォルダーにコピーしました。これで、標準のTinyMceプラグインフォルダーのすぐ下に配置されます。次に、モジュール管理UIで有効にしました。そして、ResourceManifestを作成し、テーマのフォルダーにorchard-tinymce.jsファイルをコピーして構成しました。

必死になって、ResourceManifest.csファイルとorchard-tinymce.jsファイルをテーマのフォルダーから削除し、TinyMceDeluxeモジュール自体の下にあるすべてのものを使用しましたが、それでも機能しませんでした。

なぜこれが起こっているのか、そしてなぜオーチャードでいくつかの基本的なtinyMceプラグインを使用するのがとても難しいのか誰かが何か考えを持っていますか?Wordpressで問題が発生したことはありません:-(。モジュールを使用せずにすべてを手動で追加できますか?テーマに追加して試してみます...

編集:

Giscardは、問題の原因は私のOrchardアプリケーションの実際のルートパスであると正しく答えました。プラグインの読み込みはルートからプラグインを読み取ろうとしますが、Visual Studio Orchard内でアプリケーションを実行すると、通常、ルートパスがOrchardLocalであるかのようにプラグインが実行されます。これは多くの問題を引き起こしますが、別のルートで実行されなかった場合、別のルートで別の環境にサイトをデプロイしたときに、別のルートを認識する必要があることに気付くだけなので、これらは必要な問題です。したがって、次のようにすべてのプラグインの読み込みにルートを追加する必要がありました。

//tinymce.PluginManager.load('advhr', '/modules/tinymcedeluxe/scripts/plugins/advhr/editor_plugin.js');
tinymce.PluginManager.load('advhr', '/orchardlocal/modules/tinymcedeluxe/scripts/plugins/advhr/editor_plugin.js');

残念ながら、このルートプレフィックスをハードコードされた方法で追加しても、別のサーバーにデプロイするとルートが変更される可能性があるため失敗するため、カットされません。

私はそれを解決するために汚いJavaScriptのトリックに頼らなければなりませんでした。orchard-tinymce.jsファイル内に次のJavaScriptコードを配置しました。

// Getting the root of the site by inspecting the script tag that just loaded this script...

var scripts = document.getElementsByTagName("script");
var scriptTag = scripts[scripts.length - 1];
var scriptPath = scriptTag.getAttribute("src");
var idx = scriptPath.indexOf("/Modules");
var appPath = scriptPath.substring(0, idx);

これで、appPathはアプリケーションのルートへのパスを保持します。

次に、プラグインのロードコードを次のように変更するだけで済みました。

tinymce.PluginManager.load('table', appPath + '/modules/tinymcedeluxe/scripts/plugins/table/editor_plugin.js');

そして、それは機能しており、うまくいけば、任意のルートで、またはサイトが実際にルートにある場合でも機能します(appPathは空の文字列を返します)。

4

1 に答える 1

4

TinyMceDeluxeの作者はこちら。偶然にも、私は数分前にモジュールの新しいバージョンを公開しました。新しいバージョン(v1.0.1)を試してみることをお勧めします。これは、以前のバージョンよりも簡単に機能するためです。これは、デフォルトのTinyMceモジュールへのアドオンではなく、置き換えになっているため、TinyMceを無効にして、TinyMceDeluxeを有効にするだけです。

v1.0.1以降、resourcemanifest.csに触れたり、views/scriptsなどをオーバーライドしたりする必要がなくなりました。

TinyMceDeluxeは、TinyMceの兄弟としてModulesフォルダーに入ります。モジュールフォルダは次のようになります。

modules/
    TinyMce/
    TinyMceDeluxe/

次に、/ modules / tinymcedeluxe / scripts/orchard-tinymce.jsをカスタマイズします。デフォルトでそこにあるものは、あなたが何を変えることができるかについてのたくさんの情報を持っています。

于 2012-10-13T21:37:47.203 に答える