2012-03-09 62 views
2

作爲一個SEO增強項目的一部分標記,我一直在負責將以下屬性標記爲內部的圖像,該場渲染器在頁面上生成:Sitecore的現場渲染 - 裏面添加渲染

itemprop="contentURL" - 結束標記之前。

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

當我試圖把這個領域裏面渲染器,或者將其添加爲「參數」 - 這是行不通的。

是否有另一種方式來做到這一點,而無需創建控制文件並在代碼隱藏中生成輸出?

回答

1

實際上,你可以這樣做一個FieldRenderer。你的選項有:

  1. 有做到這一點的能力從Sitecore的項目通過延長FieldRenderer(這可能會需要的努力高電平)
  2. 使用常規的.NET控件和數據綁定C#代碼隱藏。
+0

這就是我想要介入的內容。謝謝。 – sean 2012-03-09 17:21:40

+1

我正在使用一個名爲Parameters的屬性,它可以採用分隔列表並將它們顯示爲屬性(請參閱我的答案) – 2013-05-10 14:54:25

0

您可能想嘗試使用<sc:image />標記。 如果您在此添加自定義參數,則會將其添加爲img標記的屬性。

在你的情況下,標記看起來像這樣:

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

其實我試過了。但它並沒有在標籤中找到「itemprop」。我不知道爲什麼... – sean 2012-03-09 16:55:42

+0

你使用的是哪個版本?它對我有用6.4 – 2012-03-09 20:52:51

2

難道這不能通過擴展RenderField管道來完成嗎?您可能會反編譯(使用反射器或ILSpy)GetImageFieldValue並添加自己的邏輯來調整ImageRenderer的輸出?

參考Sitecore.Pipelines.RenderField.GetImageFieldValue

+0

它當然可以,但他想知道如何在不編寫自定義代碼或定製/擴展Sitecore的情況下執行此操作。 – 2012-03-10 20:14:07

+0

事實上,他說:「不必創建控制文件並在代碼隱藏中生成輸出」 – techphoria414 2012-03-10 20:33:00

+0

啊,你說得對。我一定是讀錯了。 – 2012-03-11 03:52:33

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控件沒有選擇Para​​meters參數。雖然它不是很漂亮,但我發現Jeremy的解決方案是在''之前''之後使用''''正常工作。 – 2015-08-13 15:27:17

2

在情況下,「參數」沒有包裝的控制,在歸類DIV像這樣的工作,或者試圖創建一個自定義的控制,而是:

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

您可以使用此:

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

注意上面div的類聲明中的單引號

這使得它更清晰一些,並且與Sitecore控件的上下文相關,而不是Web Developer添加外部div,如果發生更改,則外部div可能稍後會丟失上下文。

我建議節省自己的一些麻煩和使用Sitecore的的MVC版本雖然,現在,(開始新Sitecore的項目時),你可以很簡單的一類添加到它,像這樣:使用MVC How can I get Sitecore Field Renderer to use a css class for an image

0

,我發現這比擴展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 2015-06-12 13:01:09