2016-04-18 3 views
3

Я пытаюсь создать собственный токен, где, если пользователь вводит определенный текст в поле текстового редактора, этот текст отображает значение. Поэтому скажите, что пользователь вводит тестер @@, например: «Сегодняшний месяц - это @@ тестер» в поле с расширенным текстовым редактором. У меня есть C#, пытаясь найти @@ тестер в любом текстовом редакторе в файле sitecore, и если он найдет этот токен, чтобы найти этот токен в поле заголовка, который соответствует тому, где текст должен быть заменен. Так например:Как создать пользовательский токен в sitecore

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

У меня до сих пор:

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); 
      } 
     } 
    } 
} 
} 

Кроме того, я пытаюсь использовать RegEx соответствие шаблону. Я добавил это в файл webconfig, чтобы убедиться, что он его ищет.

+0

Вам это нужно, чтобы заменить значение при отображении на первой странице или в офисе Sitecore Назад? –

+0

на любой странице с редактором Rich Text – Keith

+0

Итак, вы имеете в виду на своем сайте, не так ли? –

ответ

1

Поскольку вы собираетесь отображать значение богатого текста на сайте Live, вы можете сделать замену на странице Load. Ниже метод может быть централизована один, так что любые другие субкомпоновками, что требует замены Rich Text можно использовать его

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(); 
} 

Вы можете использовать метод, как централизовать и вам просто нужно пройти различные параметры, которые необходимы. Вы можете добавить/удалить параметры, соответствующие вашим потребностям.

6

Расширение трубопровода <renderField>, вероятно, является лучшим способом.

Новый тип может быть снабжен собственным технологическим методом. Тип обрабатываемого поля можно проверить с помощью RenderFieldArgs.FieldTypeKey. Свойство FieldValue может обновляться со значениями для каждого поддерживаемого токена.

Каждый процессор в конвейере передает полученные аргументы следующему процессору в линию. Я бы добавил этот патч после GetTextFieldValue.

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

Смежные вопросы