Does anyone know if its possible to render the output of a Macro in the code behind of a page? I have an idea about using a Macro to render previews of alert emails (the emails are based on content, so a macro would be a neat solution for generating the html for the email). However, I need to be able to get the rendered contet of the Macro as part of the email sending code, so that I can use it.
Creating a new Macro in the code behind isn't a problem, but it's rendering it that I'm struggling with. Does anyone have any ideas?
That's what I'd been trying, but I realised I was using the wrong reference to Macro! Your code made me realise that I was using the wrong reference, ta :)
If anyone else needs to do this in their back office pages:
- use the reference: using umbraco.presentation.templateControls to get to the Macro object, this won't work with the one in umbraco.businesslogic
- the macro that you load doesn't have access to currentPage in it (as there's no current page if you're in the back office, haven't figured out a way to pass in a fake current page yet, though I don't need it for this, as I'm passing in the id of the page I want to use in the email)
If anyone's interested, here's a simple example, passing in a simple macro attribute:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using umbraco.presentation.templateControls;
using System.IO;
using System.Text;
public partial class umbraco_epiphany_alertPreview : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Macro test = new Macro();
test.Alias = "EmailPreview";
test.MacroAttributes.Add("alertpage", "1234");
StringBuilder sb = new StringBuilder();
StringWriter tw = new StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(tw);
test.RenderControl(hw);
Response.Write(sb.ToString());
tw.Dispose();
hw.Dispose();
}
}
Get Macro Output in Code Behind
Righty,
Does anyone know if its possible to render the output of a Macro in the code behind of a page? I have an idea about using a Macro to render previews of alert emails (the emails are based on content, so a macro would be a neat solution for generating the html for the email). However, I need to be able to get the rendered contet of the Macro as part of the email sending code, so that I can use it.
Creating a new Macro in the code behind isn't a problem, but it's rendering it that I'm struggling with. Does anyone have any ideas?
:)
Hey Tim,
Would this work? (Assuming macro inherits from control)
Matt
Hey dude!
That's what I'd been trying, but I realised I was using the wrong reference to Macro! Your code made me realise that I was using the wrong reference, ta :)
If anyone else needs to do this in their back office pages:
- use the reference: using umbraco.presentation.templateControls to get to the Macro object, this won't work with the one in umbraco.businesslogic
- the macro that you load doesn't have access to currentPage in it (as there's no current page if you're in the back office, haven't figured out a way to pass in a fake current page yet, though I don't need it for this, as I'm passing in the id of the page I want to use in the email)
If anyone's interested, here's a simple example, passing in a simple macro attribute:
is working on a reply...