如何只显示一次果园形状?
How to display Orchard shape only once?
我有一个常用的形状,可以呈现一些 HTML 代码来显示错误对话框。
HTML代码需要在整个网站中只包含一次。对于脚本和样式,Orchard 提供了 Script.Include()
和 Style.Include()
方法。
我想知道 HTML 代码是否有类似的东西,有什么想法吗?
有很多选择可以做到这一点
- 能否将您的代码添加到主题Layout.cshtml中
- 创建一个新的小部件并附加形状字段,然后在默认图层(所有页面上也是如此)上使用形状字段中的形状名称创建它
- 在过滤器中或您有权访问 WorkContext 的任何其他地方添加形状 :)
凭记忆编写的代码,可能无法编译
using System.Linq;
using System.Web.Mvc;
using Orchard;
using Orchard.DisplayManagement;
using Orchard.Mvc.Filters;
using Orchard.UI.Admin;
public class MyFilter : FilterProvider, IResultProvider {
private readonly dynamic _shapeFactory;
private readonly WorkContext _workContext;
public MyFilter(WorkContext workContext, IShapeFactory shapeFactory)
{
_workContext = workContext;
_shapeFactory = shapeFactory;
}
public void OnResultExecuting(ResultExecutingContext filterContext)
{
// should only run on a full view rendering result
if (!(filterContext.Result is ViewResult)) return;
// front end only
if (AdminFilter.IsApplied(new RequestContext(_workContext.HttpContext, new RouteData()))) return;
var body = _workContext.Layout.Body;
body.Add(_shapeFactory.MyShape());
}
public void OnResultExecuted(ResultExecutedContext filterContext) {}
}
我有一个常用的形状,可以呈现一些 HTML 代码来显示错误对话框。
HTML代码需要在整个网站中只包含一次。对于脚本和样式,Orchard 提供了 Script.Include()
和 Style.Include()
方法。
我想知道 HTML 代码是否有类似的东西,有什么想法吗?
有很多选择可以做到这一点
- 能否将您的代码添加到主题Layout.cshtml中
- 创建一个新的小部件并附加形状字段,然后在默认图层(所有页面上也是如此)上使用形状字段中的形状名称创建它
- 在过滤器中或您有权访问 WorkContext 的任何其他地方添加形状 :)
凭记忆编写的代码,可能无法编译
using System.Linq;
using System.Web.Mvc;
using Orchard;
using Orchard.DisplayManagement;
using Orchard.Mvc.Filters;
using Orchard.UI.Admin;
public class MyFilter : FilterProvider, IResultProvider {
private readonly dynamic _shapeFactory;
private readonly WorkContext _workContext;
public MyFilter(WorkContext workContext, IShapeFactory shapeFactory)
{
_workContext = workContext;
_shapeFactory = shapeFactory;
}
public void OnResultExecuting(ResultExecutingContext filterContext)
{
// should only run on a full view rendering result
if (!(filterContext.Result is ViewResult)) return;
// front end only
if (AdminFilter.IsApplied(new RequestContext(_workContext.HttpContext, new RouteData()))) return;
var body = _workContext.Layout.Body;
body.Add(_shapeFactory.MyShape());
}
public void OnResultExecuted(ResultExecutedContext filterContext) {}
}