Sitecore Field Renderer - добавьте разметку внутри рендеринга - PullRequest
2 голосов
/ 09 марта 2012

Как часть проекта улучшения SEO, мне было поручено добавить следующее свойство в разметку для изображения, которое генерирует средство визуализации полей на странице:

itemprop="contentURL" - до закрывающего тега.

<sc:FieldRenderer ID='FieldRenderer_MainImage' Runat='server' FieldName='Homepage Image'
    CssClass="_image" Parameters="w=150" itemprop="contentURL" />

Когда я пытался поместить это в Field Renderer или добавить в качестве «параметра» - это не работает.

Есть ли другой способ сделать это, не создавая управляющий файл и не генерируя вывод в коде позади?

Ответы [ 6 ]

6 голосов
/ 10 мая 2013

Вам необходимо использовать свойство " Параметры " для установки дополнительных свойств как для элемента управления, так и для элемента управления.

Вы можете сделать это следующим образом:

<sc:FieldRenderer ID="PageImage" runat="server" FieldName="ContentImage" Parameters="ControlType=C4Image&rel=relString" />
<sc:Image ID="SCPageImage" runat="server" Field="ContentImage" Parameters="ControlType=C4Image&rel=relString" />

Это будет отображаться так:

<img width="1232" height="637" controltype="C4Image" rel="relString" alt="" src="~/media/Images/DEMO backgrounds/background2.ashx">

Примечание: это работает в 6.5 и 6.6 - не уверен, какая версия используется в этом вопросе.

3 голосов
/ 09 марта 2012

Разве это не может быть сделано путем расширения конвейера RenderField? Вы можете декомпилировать (используя Reflector или ILSpy) GetImageFieldValue и добавить свою собственную логику для настройки вывода из ImageRenderer?

Ссылка Sitecore.Pipelines.RenderField.GetImageFieldValue.

2 голосов
/ 09 июля 2014

В тех случаях, когда «Параметры» не работают или не пытаются создать пользовательский элемент управления, и вместо того, чтобы обернуть элемент управления в классифицированный элемент div, как это:

<div class="my-class">
     <sc:FieldRenderer runat="server" />
</div>

Вы можете использовать это:

<sc:FieldRenderer Before="<div class='my-class'>" After="</div>" runat="server" />

Обратите внимание на одинарные кавычки в объявлении класса div выше.

Это делает его немного чище и в контексте элемента управления Sitecore вместо веб-разработчика, добавляющего внешний div, который может позже потерять свой контекст, если произойдут изменения.

Я рекомендую избавить себя от некоторых проблеми используя версию Sitecore для MVC, теперь (при запуске новых проектов Sitecore), так как вы можете очень просто добавить к нему класс, например, так: Как я могу заставить Sitecore Field Renderer использовать класс css для изображения

1 голос
/ 09 марта 2012

Вы на самом деле не можете сделать это на FieldRenderer.Доступны следующие варианты:

  1. Расширение FieldRenderer с возможностью сделать это (это, вероятно, потребует больших усилий)
  2. Используйте обычный элемент управления .NET исвязать данные из элемента Sitecore с помощью кода C #.
0 голосов
/ 12 июня 2015

используя mvc, я обнаружил, что это проще, чем расширение FieldRender, его можно использовать повторно, но придется тестировать немного больше.WIP.

var image = "<span class=\"rightImage\">" + FieldRenderer.Render(contentBlock, "Image", "mw=300") + "</span>";
            var text = FieldRenderer.Render(contentBlock, "Text");
            model.Text = FieldRendererHelper.InjectIntoRenderer(text, image, "<p>");

  public static HtmlString InjectIntoRenderer(string parentField, string injectField, string injectTag)
    {
        return new HtmlString(parentField.Insert(parentField.IndexOf(injectTag, StringComparison.InvariantCulture) + injectTag.Length, injectField));
    }
0 голосов
/ 09 марта 2012

Вы можете попробовать использовать тег <sc:image />. Если вы добавите туда пользовательский параметр, он будет добавлен в качестве атрибута к тегу img.

В вашем случае тег будет выглядеть так:

<sc:image runat="server" field="Homepage Image" width="150" itemprop="contentURL" class="_image" />
...