2

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

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

4

2 回答 2

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());
    }
  }
}
于 2013-03-13T14:42:10.943 回答
5

Maras 提出的解决方案是可行的,但对我来说,对于 RTE 领域的一个日期来说,这听起来有点矫枉过正。除此之外,在您网站的每个页面上呈现的每个 RTE 字段都会被处理。

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

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

然后将缓存添加到子布局中,并且仅在清除缓存后才渲染一次。

于 2013-03-13T15:22:15.140 回答