2

最近、Sitecore を少し使っていますが、私が取り組んでいるサイトのRich Textフィールドに著作権の日付があることに気付きました。残念ながら、今は 2012 年です。現在、この問題を解決する簡単な方法Rich Textは、著作権情報を含むフィールドに移動して変更することですが、2014 年に変更することについて心配する必要はありません。

コントロールに動的テキストを挿入する方法はありTextますか? C# で手動で置き換えることができるシジルがあったとしても、毎年手動で更新Textするか強制的に更新するよりも望ましいでしょう。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 フィールドの 1 つの日付だけでは少しやり過ぎに思えます。それに加えて、Web サイトのすべてのページにレンダリングされるすべての RTE フィールドが処理されます。

Year-value が 1 つのみの場合は、Literal を使用し、Codebehind で Literal の Text プロパティを埋めて置き換えます。

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

次にサブレイアウトにキャッシュを追加すると、キャッシュがクリアされた後に一度だけレンダリングされます。

于 2013-03-13T15:22:15.140 に答える