2012-03-09 138 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