我最近在Sitecore上花了一些时间,我注意到我正在处理的网站的版权日期在Rich Text
字段中。不幸的是,它是2012年。现在,解决此问题的简单方法是简单地进入并更改具有版权信息的Rich Text
字段,但我不想担心在2014年更改它
有没有办法将动态文本插入Text
控件?即使我有一个可以在C#中手动替换的印记,也可能比Text
切换Literal
或每年强制手动更新更好。
答案 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());
然后将缓存添加到子布局中,只有在清除缓存后才会渲染一次。