将动态文本插入Sitecore Rich Text字段

时间:2013-03-13 14:31:56

标签: richtextbox sitecore

我最近在Sitecore上花了一些时间,我注意到我正在处理的网站的版权日期在Rich Text字段中。不幸的是,它是2012年。现在,解决此问题的简单方法是简单地进入并更改具有版权信息的Rich Text字段,但我不想担心在2014年更改它

有没有办法将动态文本插入Text控件?即使我有一个可以在C#中手动替换的印记,也可能比Text切换Literal或每年强制手动更新更好。

2 个答案:

答案 0 :(得分:9)

您可以将自己的处理器添加到renderField管道,检查当前字段是否为 RichText 字段,并用当前年份替换令牌(例如__YEAR__):

<renderField>
  <!--... other processors -->
  <processor type="My.Assembly.Namespace.ReplaceTokenProcessor, My.Assembly" />
  <!--... other processors -->
</renderField>

和处理器的代码:

namespace My.Assembly.Namespace
{
  public class ReplaceTokenProcessor
  {
    public virtual void Process(RenderFieldArgs args)
    {
      if (args.FieldTypeKey != "rich text")
        return;

      args.Result.FirstPart = (args.Result.FirstPart == null) ? null : args.Result.FirstPart.Replace("__YEAR__", DateTime.Now.Year.ToString());
      args.Result.LastPart = (args.Result.LastPart == null) ? null : args.Result.LastPart.Replace("__YEAR__", DateTime.Now.Year.ToString());
    }
  }
}

答案 1 :(得分:4)

Maras提出的解决方案是有效的,但对我而言,在RTE字段中只有一个日期听起来有点矫枉过正。 除此之外,还会处理在您网站的每个页面上呈现的每个RTE字段。

如果它仅用于一个Year-value,我将使用Literal并填充并替换Codebehind中Literal的Text属性:

Literal.Text = FieldRenderer.Render(Context.Item, "RTE_FieldName")
                  .Replace("__YEAR__", DateTime.Now.Year.ToString());

然后将缓存添加到子布局中,只有在清除缓存后才会渲染一次。