-
-
Save jonathanread/4f9e903741c385567f85f87456484b91 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private static void Bootstrapper_Bootstrapped(object sender, EventArgs e) | |
{ | |
//Register pre render event to add meta data for pages | |
EventHub.Subscribe<IPagePreRenderCompleteEvent>(PageMetaDataHelper.OnPagePreRenderCompleteEventHandler); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Web; | |
using Telerik.Sitefinity.Services; | |
using Telerik.Sitefinity.Web.Events; | |
using Telerik.Sitefinity.Libraries.Model; | |
using System.Web.UI; | |
using System.Web.UI.HtmlControls; | |
namespace CLane.Extensions.Pages | |
{ | |
public static class PageMetaDataHelper | |
{ | |
/// <summary> | |
/// Page prerender event to handle placing the meta tags | |
/// </summary> | |
/// <param name="evt">Prerender event</param> | |
public static void OnPagePreRenderCompleteEventHandler(IPagePreRenderCompleteEvent evt) | |
{ | |
TryAddMetaField(evt, "og:title", "OGTitle"); | |
TryAddMetaField(evt, "og:description", "OGDescription"); | |
TryAddMetaField(evt, "og:image", "OGImage"); | |
string ogSiteName = "og:site_name"; | |
if (!DoesTagExist(evt.Page, ogSiteName)) | |
{ | |
evt.Page.Header.Controls.Add(BuildOGMetaTag(ogSiteName, SystemManager.CurrentContext.CurrentSite.Name)); | |
} | |
string ogUrl = "og:url"; | |
if (!DoesTagExist(evt.Page, ogUrl)) | |
{ | |
evt.Page.Header.Controls.Add(BuildOGMetaTag(ogUrl, SystemManager.CurrentHttpContext.Request.Url.ToString())); | |
} | |
} | |
/// <summary> | |
/// Try to add meta field to head | |
/// </summary> | |
/// <param name="evt">Prerender event</param> | |
/// <param name="metaFieldIdentifier">Meta field identifier</param> | |
/// <param name="pageFieldIdentifier">Sitefinity page field/property name</param> | |
private static void TryAddMetaField(IPagePreRenderCompleteEvent evt, string metaFieldIdentifier, string pageFieldIdentifier) | |
{ | |
var page = evt.Page; | |
var pageNode = evt.PageSiteNode; | |
var field = pageNode.GetCustomFieldValue(pageFieldIdentifier); | |
string fieldValue = string.Empty; | |
if (field is string) | |
{ | |
fieldValue = field as string; | |
} | |
else if (field is Image img) | |
{ | |
if (img != null) | |
{ | |
fieldValue = img.Url; | |
} | |
} | |
if (!fieldValue.IsNullOrWhitespace() && !DoesTagExist(page, metaFieldIdentifier)) | |
{ | |
page.Header.Controls.Add(BuildOGMetaTag(metaFieldIdentifier, fieldValue)); | |
} | |
} | |
/// <summary> | |
/// Does the tag already exist in the page header | |
/// </summary> | |
/// <param name="page">Page being rendered</param> | |
/// <param name="tagPropertyTitle">Meta tag property title</param> | |
/// <returns>If the tag already exists in the page header</returns> | |
private static bool DoesTagExist(Page page, string tagPropertyTitle) | |
{ | |
//Sitefinity adds it's OG tags via literals, so we check them here | |
return page.Header.Controls.OfType<LiteralControl>().Any(control => control.Text.Contains(tagPropertyTitle)); | |
} | |
/// <summary> | |
/// Build out meta tag for insertion | |
/// </summary> | |
/// <param name="property">Meta property name</param> | |
/// <param name="content">Value of meta field</param> | |
/// <returns>HtmlMeta tag element</returns> | |
private static HtmlMeta BuildOGMetaTag(string property, string content) | |
{ | |
var meta = new HtmlMeta() { Content = content }; | |
meta.Attributes.Add("property", property); | |
return meta; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment