首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用NVelocity与FieldRenderer结合使用

用NVelocity与FieldRenderer结合使用
EN

Stack Overflow用户
提问于 2014-04-28 19:51:42
回答 1查看 368关注 0票数 2

我在我的网页上有一个FieldRenderer控件,它被绑定到一个Sitecore项目。

代码语言:javascript
复制
fieldRenderer.Item = SomeSitecoreItem;
fieldRenderer.FieldName = "SomeField";

现在,SomeField在我的SomeSitecoreItem中有了NVelocity令牌。如何让fieldRenderer来呈现那些NVelocity令牌。

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

代码语言:javascript
复制
<h1>$!SomeToken</h1>

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-29 12:11:49

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

代码语言:javascript
复制
<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>

代码可以如下所示:

代码语言:javascript
复制
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方法可以提前释放。除非你必须这样做,否则这里不要做任何昂贵的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23349964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档