So you jumped in head first into Scriban Templates with Sitecore. And now you hit a wall because it doesn't do that one thing you could easily have completed in MVC forms with a controller. Well, this is where you can build your own custom functions to work within Scriban templates. Sitecore already provides a few of these at https://doc.sitecore.com/developers/sxa/93/sitecore-experience-accelerator/en/the-embedded-functions-for-the-scriban-template.html.
So How Do You Build Your Own?
You will notice that you just need to inherit from the class GetScribanItemMember, then set the MemberName and finally override the Resolve function. So far pretty easy.
Second, now we need to tell Sitecore that this new Scriban function is available. We added a new configuration file in App_Config -> Include -> z.Project.Foundation. This file adds pipelines into Sitecore to define the Scriban functions.
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:role="http://www.sitecore.net/xmlconfig/role/">
<sitecore>
<pipelines>
<getScribanItemMembers>
<processor type="Project.Foundation.Pipelines.Scriban.ItemProcessors.GetConferenceContext, Project.Foundation" resolve="true" />
</getScribanItemMembers>
<generateScribanContext>
<processor type="Project.Foundation.Pipelines.Scriban.ContextProcessors.GetSocialLink, Project.Foundation" resolve="true" />
</generateScribanContext>
</pipelines>
</sitecore>
</configuration>
Here we added the ItemMember to the code above, but I also wanted to show the configuration for Context if you need to create those processors as well.
Now, you have the code deployed, Sitecore is aware of this new function through configuration and you can use your new member extender. Remember, in the scenario we built we extended the i_item context to now have a conference member. Let's see a few interactions with this new member.
{{ this.conferenceEvent = sc_follow i_item.conference "Conference Event" }}
This call uses the sc_follow function from Sitecore to crawl our Conference method and return the Conference Event property on that item. The sc_follow is a Sitecore function that
Returns the item that is selected from a field and stores links to items. If the field can contain links to multiple items, the first item in the list is returned. If the field is empty, the function returns a null value.
This way if we are in the context of a conference it will return the property we are looking for, if not it returns a null value. Or we can just check the id property of the conference to see if it has context.
{{ if (i_item.conference.id | string.size > 0) }}
And then we can finally just loop through the conference children to get what we need. This gets the nearest parent of a conference and loops through the child items.
{{ for i_childevent in i_item.conference.children }}
So as you can see, Scriban templates are very powerful in their basic form, but add this ability to extend them as you need for your project and there is no stopping them. Good luck.
Until next time.
Comments
Post a Comment