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 编辑器不会显示。如果我再次评论它,它会完美显示。不是一个插件工作。一旦我取消注释其中一个,即使我不在 TinyMCE.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 模块本身下的所有内容,但它仍然无法正常工作。

有谁知道为什么会发生这种情况,以及为什么在 Orchard 中使用一些基本的 tinyMce 插件如此困难?我在 Wordpress 中从来没有遇到过问题 :-(。我可以在不使用模块的情况下手动添加所有内容吗?我会将它添加到我的主题中并尝试一下...

编辑:

Giscard 正确回答问题的罪魁祸首是我的 Orchard 应用程序的实际根路径。插件的加载尝试从根目录读取它们,但在 Visual Studio Orchard 中运行应用程序时,通常会像根路径是 OrchardLocal 一样运行它。这会产生很多问题,但它们是必要的问题,因为如果它没有以不同的 root 运行,您只会注意到在使用不同的 root 将站点部署在不同的环境中时需要注意不同的 root。所以我不得不像这样将根添加到所有插件加载中:

//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 技巧来解决它。我已将以下 JavaScript 代码放入 orchard-tinymce.js 文件中:

// 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,或覆盖任何视图/脚本/等。

TinyMceDeluxe 进入 Modules 文件夹,作为 TinyMce 的兄弟。您的模块文件夹将如下所示:

modules/
    TinyMce/
    TinyMceDeluxe/

然后自定义 /modules/tinymcedeluxe/scripts/orchard-tinymce.js。默认情况下,那里有一堆关于你可以改变什么的信息。

于 2012-10-13T21:37:47.203 回答