2012-03-09 3 views
2

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

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

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

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

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

ответ

1

Вы на самом деле не можете сделать это на FieldRenderer. Вы опции:

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

Вот что я, по-видимому, мог бы принять здесь. Благодарю. – sean

+1

Я использую свойство под названием «Параметры», которое может принимать в разделительном списке и отображать их как атрибуты (см. Мой ответ). –

0

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

В вашем случае тег будет выглядеть следующим образом:

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

Собственно, я пробовал это. Но он не поднимает «itemprop» в теге. Я не уверен, почему ... – sean

+0

Какую версию вы используете? Это сработало для меня в 6.4 –

2

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

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

+0

Это, безусловно, может, но он хочет знать, как это сделать, не создавая собственный код или настраивая/расширяя Sitecore , –

+0

На самом деле он сказал «без создания файла управления и генерации вывода в коде» – techphoria414

+0

Ahhh, да, вы правы. Должно быть, я читал это неправильно. –

5

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

вы можете так:

<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 - не уверены, какая версия используется в этом вопрос.

+1

По какой-то причине элемент управления FieldRenderer не собирает атрибут «Параметры», когда я пытаюсь использовать его для установки класса. Хотя это не так красиво, я нашел решение Джереми использовать 'before' /' after' отлично. –

2

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

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

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

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

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

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

Я рекомендую спасти себя некоторые проблемы и с использованием версии MVC в Sitecore, хотя, в настоящее время, (при запуске новых проектов Sitecore), как вы можете очень просто добавить класс к нему так: How can I get Sitecore Field Renderer to use a css class for an image

0

с использованием 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

Не работает очень хорошо, решил сделать вместо этого макет, но стыдно, что это отличный способ обойти это. Вероятно, это способ обойти это с помощью jquery, чтобы переместить элемент на сохранение, но, похоже, много работы для чего-то, что должно быть относительно простым. – Netferret

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