如何将JS和CSS添加到Orchard模块中的所有内容部分

时间:2015-06-16 11:54:08

标签: css orchardcms

我正在为Orchard CMS 1.8.1编写一个模块

我想为我为模块编写的所有内容部分添加自定义样式。无论网站管理员选择哪个主题,我都需要这些工作。我可以为每个内容部分的每个视图文件添加CSS和JS文件的链接 - 但这看起来很混乱,容易出现未来的错误 - 有一个单个文件加载我所有内容部分所需的样式的最佳方法是什么?

我应该提供包含链接的不同Content.cshtml吗?如果管理员需要自己控制主要的Content.cshtml

,这似乎也有问题

非常感谢

1 个答案:

答案 0 :(得分:4)

Handler应该做到这一点,我从头顶写下这个,所以不确定它是否真的有效。

首先创建ResourceManifest.cs并定义样式表和脚本

public class ResourceManifest : IResourceManifestProvider
{
    public void BuildManifests(ResourceManifestBuilder builder)
    {
        var manifest = builder.Add();
        manifest.DefineStyle("MyStylesheet").SetUrl("mystylesheet.min.css", "mystylesheet.css").SetVersion("1.0.0");
        manifest.DefineScript("MyScript").SetUrl("myscript.min.js", "myscript.js").SetVersion("1.0.0");
    }
}

然后创建内容处理程序并覆盖BuildDisplayShape

就足够了
public class MyResourceHandler : ContentHandler
{
    private readonly Work<IResourceManager> _resourceManager;

    public MyResourceHandler(Work<IResourceManager> resourceManager)
    {
        _resourceManager = resourceManager;
    }

    protected override void BuildDisplayShape(BuildDisplayContext context)
    {
        if (context.DisplayType == "Detail" && context.ContentItem.Has(typeof(MyPart)))
        {
            this._resourceManager.Value.Require("stylesheet", "MyStylesheet");
            this._resourceManager.Value.Require("script", "MyScript");
        }

        base.BuildDisplayShape(context);
    }
}

根据需要调整IF。让我知道它是否有效;)

使用ResourceManifest进行版本控制的美妙之处在于,任何人都可以通过在自己的ResourceManifest(模块/主题)中定义具有相同名称和更高版本号的样式来替换您自己的样式表/ javascript,并且不要必须触摸任何原始文件。