如何只显示一次果园形状?

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) {}
}