Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Sitecore SXA Scriban extension to expose the innards of a link field
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/" xmlns:role="http://www.sitecore.net/xmlconfig/role/">
<sitecore>
<pipelines>
<generateScribanContext>
<processor type = "Example.ScribanExtensions.Pipelines.LinkExtensions, Example.ScribanExtensions" resolve="true" />
</generateScribanContext>
</pipelines>
</sitecore>
</configuration>
using Scriban.Runtime;
using Sitecore.Data.Fields;
using Sitecore.Data.Items;
using Sitecore.XA.Foundation.Abstractions;
using Sitecore.XA.Foundation.Scriban.Pipelines.GenerateScribanContext;
using System;
using Example.ScribanExtensions.Model;
namespace Example.ScribanExtensions.Pipelines
{
public class LinkExtensions : IGenerateScribanContextProcessor
{
protected readonly IPageMode PageMode;
private readonly IContext context;
private delegate LinkInfo LinkInfoDelegate(Item item, object linkFieldName);
public LinkExtensions(IPageMode pageMode, IContext context)
{
PageMode = pageMode;
this.context = context;
}
public void Process(GenerateScribanContextPipelineArgs args)
{
var linkInfo = new LinkInfoDelegate(GetLinkInfo);
args.GlobalScriptObject.Import("sc_link_info", (Delegate)linkInfo);
}
public LinkInfo GetLinkInfo(Item item, object field)
{
if (item == null
|| String.IsNullOrWhiteSpace((string)field)
|| item.Fields[(string)field] == null
)
{
return null;
}
LinkField lnkField = (LinkField)item.Fields[(string)field];
if (lnkField == null)
{
return null;
}
return new LinkInfo(lnkField);
}
}
}
using Sitecore.Data.Fields;
namespace Example.ScribanExtensions.Model
{
public class LinkInfo
{
public string url { get; set; }
public string text { get; set; }
public string title { get; set; }
public string anchor { get; set; }
public string target { get; set; }
public LinkInfo() { }
public LinkInfo(LinkField item)
{
url = item.GetFriendlyUrl();
text = item.Text;
title = item.Title;
anchor = item.Anchor;
target = item.Target;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment