2013-03-13 70 views
2

最近我一直花費在Sitecore上一段時間,並且我注意到我正在使用的網站在Rich Text字段中有版權日期。不幸的是,這是2012年。現在,解決這個問題的簡單方法是簡單地進入並更改具有版權信息的Rich Text字段,但我不想擔心在2014年更改它。將動態文本插入Sitecore Rich Text字段

有沒有辦法將動態文本插入到Text控件中?即使我可以在C#中手動替換,我們也可以選擇手動替換,或者將Text切換爲Literal,或者每年強制手動更新。

回答

9

你可以用當年自己的處理器添加到renderField管道,檢查當前場是否是富文本場和更換令牌(如__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()); 
    } 
    } 
} 
+0

這正是我所需要的。 – cwallenpoole 2013-03-13 15:02:45

+1

對於那些不習慣使用'processor's的筆記,您應該將'processor'節點放在'renderField'節點的下方,以確保您獲得所需的行爲。 – cwallenpoole 2013-03-13 15:24:00

3

解決方案Maras的建議工作,但對我來說,這聽起來有點矯枉過正只是在RTE領域的一個日期。 除此之外,您的網站中每個頁面上呈現的每個RTE字段都將被處理。

如果是隻有一年價值我會用文字和填充和更換文字的代碼隱藏的Text屬性:

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

然後添加緩存到sublayout並且僅呈現一次緩存清除後。

相關問題