【问题标题】:Sitecore Field Renderer - add markup inside renderingSitecore Field Renderer - 在渲染中添加标记
【发布时间】:2012-03-09 14:27:17
【问题描述】:

作为 SEO 增强项目的一部分,我的任务是在字段渲染器在页面上生成的图像的标记内添加以下属性:

itemprop="contentURL" - 在结束标记之前。

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

当我试图将它放在字段渲染器中,或将其添加为“参数”时 - 它不起作用。

是否有另一种方法可以做到这一点,而无需创建控制文件并在代码隐藏中生成输出?

【问题讨论】:

    标签: sitecore


    【解决方案1】:

    您需要使用“Parameters”属性在 和 控件上设置额外的属性。

    你可以这样:

    <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 - 不确定此问题中使用的是哪个版本。

    【讨论】:

    • 由于某种原因,当我尝试使用它来设置类时,FieldRenderer 控件没有选择Parameters 属性。虽然它不那么漂亮,但我发现 Jeremy 使用 before/after 的解决方案效果很好。
    【解决方案2】:

    这不能通过扩展RenderField 管道来完成吗?您可能会反编译(使用 Reflector 或 ILSpy)GetImageFieldValue 并添加您自己的逻辑来调整来自ImageRenderer 的输出?

    参考Sitecore.Pipelines.RenderField.GetImageFieldValue

    【讨论】:

    • 当然可以,但他想知道如何在不编写自定义代码或自定义/扩展 Sitecore 的情况下做到这一点。
    • 其实他说的是“无需创建控制文件并在代码隐藏中生成输出”
    【解决方案3】:

    如果“参数”不起作用或尝试创建自定义控件,而不是将控件包装在这样的分类 div 中:

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

    你可以用这个:

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

    注意上面 div 的类声明中的单引号

    这使它更简洁,并与 Sitecore 控件关联,而不是 Web 开发人员添加一个外部 div,如果发生更改,以后可能会失去其上下文。

    我建议您省去一些麻烦并使用 MVC 版本的 Sitecore,但现在(在开始新的 Sitecore 项目时),因为您可以非常简单地向其中添加一个类,如下所示: How can I get Sitecore Field Renderer to use a css class for an image

    【讨论】:

      【解决方案4】:

      您实际上无法在FieldRenderer 上执行此操作。你的选择是:

      1. 扩展 FieldRenderer 使其具有执行此操作的能力(这可能需要付出很大的努力)
      2. 使用常规 .NET 控件并通过 C# 代码隐藏从 Sitecore 项绑定数据。

      【讨论】:

      • 这就是我认为可能会涉及的内容,在这里。谢谢。
      • 我正在使用一个名为Parameters的属性,它可以接受一个分隔列表并将它们显示为属性(见我的回答)
      【解决方案5】:

      您可能想尝试使用&lt;sc:image /&gt; 标记。 如果您在此处添加自定义参数,则会将其作为属性添加到 img 标签。

      在您的情况下,标签将如下所示:

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

      【讨论】:

      • 其实我试过了。但它没有拾取标签中的“itemprop”。我不知道为什么......
      【解决方案6】:

      使用 mvc,我发现这比扩展 FieldRender 更容易,应该是可重用的,但需要进行更多测试。在制品。

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

      【讨论】:

      • 效果不佳,决定改用布局约束,遗憾的是没有一种很好的解决方法。可能是一种使用 jquery 解决此问题的方法,以便在保存时移动项目,但对于应该相对简单的事情来说,这似乎需要做很多工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多