2016-04-18 13 views
3

Ich versuche, ein benutzerdefiniertes Token erstellen, wo, wenn ein Benutzer bestimmten Text in einem Rich-Text-Editor-Feld eingibt, dieser Text einen Wert anzeigen wird. Sagen wir also, der Benutzer gibt in einem Rich-Text-Editor-Feld @@ Tester ein wie "Heute ist der Monat @@ Tester". Ich habe C# versucht, @@ Tester in einem Rich-Text-Editor-Feld innerhalb von Sitecore zu finden, und wenn es das Token findet, um dieses Token in einem Titelfeld zu finden, das mit dem Text übereinstimmt, der ersetzt werden soll. So heißt:So erstellen Sie ein benutzerdefiniertes Token in SiteCore

Item Name = token 
Item ID = {06912058-6U9A-4BBF-BAE3-9306974EBE68} 
Title = @@tester 
Content (rich text editor) = February 

Ich habe bisher:

namespace LonzaWeb.Pipeline.RenderField 
{ 
public class AddToken 
{ 
    public void Process(RenderFieldArgs args) 
    { 
     Item currentItem = Sitecore.Context.Item; 

     if ((args.FieldTypeKey == "rich text") && currentItem.TemplateID.ToString() == "{06912058-6U9A-4BBF-BAE3-9306974EBE68}") 
     { 

      var tItem = currentItem.Fields["Title"].ToString(); 

      if (tItem != null) { 
       Regex regex = new Regex(tItem); 
       Match match = regex.Match(tItem); 
      } 
     } 
    } 
} 
} 

Auch ich versuche, RegEx Pattern-Matching zu verwenden. Ich habe dies in die webconfig-Datei hinzugefügt, um sicherzustellen, dass es danach sucht.

+0

Sie müssen sie den Wert ersetzen, wenn auf der Titelseite oder auf der Sitecores Back-Office-Rendering? –

+0

auf jeder Seite, die den Rich Text Editor hat – Keith

+0

Sie meinen also auf Ihrer Live-Site, oder? –

Antwort

1

Da Sie den Rich-Text-Wert auf der Live-Site rendern werden, können Sie die Ersetzung beim Laden der Seite vornehmen. Die folgenden Verfahren kann in einer zentralisierten Lösung sein, so dass alle anderen Sublayouts, die Rich-Text-Ersatz erfordert es verwenden können

public static string RichTextReplacer(Item currentItem, string fieldName) 
{ 
    var richTextValue = currentItem.Fields[fieldName].Value; 

    var getToken = Sitecore.Context.Database.Items.GetItem("path to your token item"); 

    var sb = new StringBuilder(richTextValue); 

    sb.Replace(getToken.Fields["Title"].value, getToken.Fields.["Content"].value); 

    return sb.ToString(); 
} 

Sie die Methode als zentralisieren verwenden können und Sie müssen nur die verschiedenen Parameter zu übergeben, die erforderlich sind. Sie können Parameter hinzufügen/entfernen, die Ihren Anforderungen entsprechen

6

Die Erweiterung der <renderField> Pipeline ist wahrscheinlich ein besserer Weg zu gehen.

Ein neuer Typ kann mit einer eigenen Prozessmethode versehen werden. Der Typ des zu verarbeitenden Feldes kann mit dem RenderFieldArgs.FieldTypeKey überprüft werden. Die FieldValue-Eigenschaft kann mit Werten für jedes unterstützte Token aktualisiert werden.

Jeder Prozessor in der Pipeline leitet die resultierenden Argumente an den nächsten Prozessor in der Leitung weiter. Ich würde diesen Patch nach GetTextFieldValue hinzufügen.

http://www.sitecore.net/learn/blogs/technical-blogs/sitecorebetter/posts/2013/06/extending-the-sitecore-renderfield-pipeline.aspx

http://www.sitecore.net/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2011/08/replace-tokens-in-rich-text-fields-using-the-sitecore-aspnet-cms.aspx

Verwandte Themen