gpt4 book ai didi

email - Orchard cms 渲染形状作为电子邮件模板

转载 作者:行者123 更新时间:2023-12-02 09:44:22 26 4
gpt4 key购买 nike

我正在尝试将形状呈现为电子邮件模板。我希望能够从后台任务以及当前请求中执行此操作。有人可以给我一些建议吗?我认为 Orchard.DisplayManagement.IDisplayHelperFactory 是关键,但是我需要制造 ViewContext 和 IViewDataContainer,我可能可以从 Orchard.Mvc.ViewEngines.Razor.WebViewPage 获取它们?

有人做过类似的事情吗?我正在看https://github.com/andrewdavey/postal/blob/master/src/Postal/EmailViewRenderer.cs寻求一些灵感,只是想知道是否有人能让我走上正轨?

再次感谢!

最佳答案

经过对 Orchard 源代码的深入挖掘以及从 Andrew Davey 的邮政应用程序中获得的一些灵感,我设法想出了一个解决方案。请参阅下面的代码片段

private void RenderMessage(MessageContext context, dynamic shape)
{
var httpContext = new EmailHttpContext(new Uri("http://localhost/orchard/"));
var routeData = new RouteData();
routeData.DataTokens.Add("IWorkContextAccessor", _workContextAccessor);
routeData.Values["controller"] = "Dummy";
var requestContext = new RequestContext(httpContext, routeData);
var controllerContext = new ControllerContext(requestContext, new DummyController());
var viewContext = new ViewContext(controllerContext, new ShapeView(shape), new ViewDataDictionary(shape.Model), new TempDataDictionary(), new StringWriter());
var scope = _workContextAccessor.CreateWorkContextScope(viewContext.HttpContext);
scope.WorkContext.CurrentTheme = _siteThemeService.GetSiteTheme();
var page = new EmailWebViewPage(viewContext, new ViewDataDictionary<dynamic>(shape.Model));

var displayHelperFactory = _services.WorkContext.Resolve<IDisplayHelperFactory>();
var display = displayHelperFactory.CreateHelper(page.ViewContext, page);
context.MailMessage.Body = display(shape).ToHtmlString();
scope.Dispose();
}

class DummyController : Controller
{
}

class ShapeView : IView
{
private readonly dynamic _shape;

public ShapeView(dynamic shape)
{
_shape = shape;
}

#region IView Members

public void Render(ViewContext viewContext, TextWriter writer)
{
}

#endregion
}

EmailHttpContext 取自邮政项目。这用于构造 Controller 和 View 上下文。然后,我只需扩展 orchard 的 WebViewPage 来创建 EmailWebViewPage,它使我能够利用 orchard 基础设施来访问 View 引擎等。

这不是最漂亮的解决方案,需要进行彻底的测试,但似乎符合我的要求。

如果有人有任何反馈,或者想要完整的代码,请随时给我留言。

关于email - Orchard cms 渲染形状作为电子邮件模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7061044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com