gpt4 book ai didi

c# - 将 NVelocity 与 Sitecore FieldRenderer 结合使用

转载 作者:行者123 更新时间:2023-11-30 22:06:48 27 4
gpt4 key购买 nike

我的网页上有一个绑定(bind)到 Sitecore 项目的 FieldRenderer 控件。

fieldRenderer.Item = SomeSitecoreItem;
fieldRenderer.FieldName = "SomeField";

现在我的 SomeSitecoreItem 中的 SomeField 有 NVelocity token 。我怎样才能让 fieldRenderer 渲染那些 NVelocity token 。

例如,SomeField 的内容可以是以下标记:

<h1>$!SomeToken</h1>

有没有一种方法可以将 $!SomeToken 替换为代码后面的相应值?

最佳答案

您可以在 renderField 管道中添加一个步骤:

<renderField>
<processor type="Sitecore.Pipelines.RenderField.SetParameters, Sitecore.Kernel"/>
<processor type="Sitecore.Pipelines.RenderField.GetFieldValue, Sitecore.Kernel"/>
<processor type="Sitecore.Pipelines.RenderField.GetTextFieldValue, Sitecore.Kernel"/>
<processor type="Sitecore.Pipelines.RenderField.ExpandLinks, Sitecore.Kernel"/>
<processor type="Sitecore.Pipelines.RenderField.GetImageFieldValue, Sitecore.Kernel"/>
<processor type="Sitecore.Pipelines.RenderField.GetLinkFieldValue, Sitecore.Kernel"/>
<processor type="Sitecore.Pipelines.RenderField.GetInternalLinkFieldValue, Sitecore.Kernel"/>
<processor type="Sitecore.Pipelines.RenderField.GetMemoFieldValue, Sitecore.Kernel"/>
<processor type="Sitecore.Pipelines.RenderField.GetDateFieldValue, Sitecore.Kernel"/>
<processor type="Sitecore.Pipelines.RenderField.GetDocxFieldValue, Sitecore.Kernel"/>
<processor type="Sitecore.Pipelines.RenderField.AddBeforeAndAfterValues, Sitecore.Kernel"/>
<processor type="Sitecore.Pipelines.RenderField.RenderWebEditing, Sitecore.Kernel"/>
<processor type="MyProject.ExpandNVelocityTokens, MyProject"/>
</renderField>

代码可能是这样的:

public class ExpandNVelocityTokens
{
public virtual void Process(RenderFieldArgs args)
{
if (!ShouldRun())
return;


if (!Sitecore.Context.PageMode.IsPageEditorEditing)
{
args.Result.FirstPart = ExpandVelocityTokens(args.Result.FirstPart);
args.Result.LastPart = ExpandVelocityTokens(args.Result.LastPart);
}
}

protected bool ShouldRun()
{
// In the cheapest possible way - determine if we need to do anything
}


protected string ExpandVelocityTokens(string input)
{
//... do velocity stuff here
}
}

注意:此管道针对呈现的每个字段运行,因此它非常快是最重要的 - 因此 ShouldRun 方法用于提早中断。除非必须,否则不要在这里做任何昂贵的事情。

关于c# - 将 NVelocity 与 Sitecore FieldRenderer 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23349964/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com