如何将 JS 和 CSS 添加到 Orchard 模块中的所有内容部分
How to add JS and CSS to all content parts in an Orchard module
我正在为 Orchard CMS 1.8.1 编写一个模块
我想将自定义样式添加到我为该模块编写的所有内容部分。无论网站管理员选择的主题如何,我都需要这些才能正常工作。我可以在每个内容部分的每个视图文件中添加指向 CSS 和 JS 文件的链接 - 但这看起来很混乱并且容易出现未来错误 - 让单个文件加载所有所需样式的最佳方法是什么我的内容部分?
我是否应该提供包含链接的其他 Content.cshtml?如果管理员需要自己控制主 Content.cshtml
,这似乎也可能有问题
非常感谢
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 与版本控制结合使用的好处在于,任何人都可以用自己的 stylesheets/javascript 替换您的 stylesheets/javascript,只需在自己的 ResourceManifest (module/theme) 中定义相同名称或更高名称的样式即可版本号,无需修改任何原始文件。
我正在为 Orchard CMS 1.8.1 编写一个模块
我想将自定义样式添加到我为该模块编写的所有内容部分。无论网站管理员选择的主题如何,我都需要这些才能正常工作。我可以在每个内容部分的每个视图文件中添加指向 CSS 和 JS 文件的链接 - 但这看起来很混乱并且容易出现未来错误 - 让单个文件加载所有所需样式的最佳方法是什么我的内容部分?
我是否应该提供包含链接的其他 Content.cshtml?如果管理员需要自己控制主 Content.cshtml
,这似乎也可能有问题非常感谢
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 与版本控制结合使用的好处在于,任何人都可以用自己的 stylesheets/javascript 替换您的 stylesheets/javascript,只需在自己的 ResourceManifest (module/theme) 中定义相同名称或更高名称的样式即可版本号,无需修改任何原始文件。