Our Requirement – White Label Web-Site
To have multiple web-sites all utilising shared content.
To have multiple sites in EPiServer Entriprise Edition with each site using “Fetch Data” to retrieve content from the master-site.
Each site is then branded differently.
An editor updates a page (Page A) on the master-site to have a hyperlink to another page (Page B) on the master-site. When this link is fetched into one of the white labelled sites the link goes to the page on the master-site (Page B) rather than what is wanted – the version of the page on the white labelled site.
I am considering coding a plug-in (IDynamicContent) that the editor would use instead of the standard EPiServer hyperlink tool. This plug-in would create a relative URL at edit-time. This should mean that the link should work as required in the White Labelled sites.
Has anyone done something similar or get an alternative solution? Is there something in the Enterprise Edition (we haven’t got our Enterprise license yet) that will do this for us?
Any help would be appreciated.
p.s. this is all being done in CMS6.
We just did this exact same thing -- 86 sites running on the same install, all pulling content from a central set of pages (stored right under the root node).
Are all the sites going to have the exact same content? Will all pages in the master site exist in all the multiple, white-labeled sites?
I wouldn't create this relative link at edit time, I'd do it at render time. Hook into HTML rewriting, and catch all the A tags going to the master site, and rewrite them there to remove the domain. You could probably do it in a dozen lines of code.
Each site will have the same page structure with 99% of the content exactly the same. There will be a couple of page properties that will be overwritten by the editors.
Agree that this should be done at render and not edit. After posting this I looked at ways of doing just that.
First I looked at using a Control Adapter (I am a big fan of Control Adapters see recent issue and solution) that I hooked into the HtmlAnchor but this did not fire when expected - propbably because the html anchor tags are being rendered as a string not by creating a control.
I then looked at the possibility of coding a new version of the PropertyXhtmlStringControl - haven't got very far on this yet.
Could you explain / point me at an example or article of "hook into HTML rewriting".
Probably worth noting I am very new to EPiServer - this is my first project!
Thank you for any help you can give.
This code has literally been through about 10 seconds of testing, but it worked for me. Compile this into your project and test throughly.
/// Remove the domain from links
public class ForceRelativeLinks
public static string oldDomain = "http://www.domain.com";
public static void Initialize(int optionFlag)
HtmlRewriteToExternal.HtmlRewriteInit += HtmlRewriteToExternal_HtmlRewriteInit;
static private void HtmlRewriteToExternal_HtmlRewriteInit(object sender, HtmlRewriteEventArgs e)
e.RewritePipe.HtmlRewriteValue += HtmlRewriteValueEventHandler;
/// This runs on every element parse...
/// <param name="sender"></param>
/// <param name="e"></param>
static private void HtmlRewriteValueEventHandler(object sender, HtmlRewriteEventArgs e)
//I stole this conditional expression from this page: http://sdk.episerver.com/library/cms6/Developers%20Guide/Advanced%20Features/Tutorials/HTML%20Rewriting%20Functionality.htm#Rewriting%20the%20HTML%20-%20HtmlRewriteValueEventHandler
if (e.ElementType == HtmlRewritePipe.ElementTypes.A && e.NodeType == XmlNodeType.Attribute && string.Compare(e.Name, "href", StringComparison.OrdinalIgnoreCase) == 0)