【问题标题】:Get each child item and display it获取每个子项并显示它
【发布时间】:2012-01-20 11:00:32
【问题描述】:

假设我在 sitecore cms 中有一个父项和三个子项

Home
  -ChildOne 
  -ChildTwo
  -ChildThree

我想遍历所有子项并使用它们各自的子布局显示它们。

这可能吗?我需要做些什么来实现这一点。

目前,我可以在一个占位符中显示一项,我正在考虑使用中继器来做到这一点。

我最好的选择是什么?这真的可能吗?您向我建议的方法有什么缺点吗?

【问题讨论】:

    标签: c# asp.net content-management-system sitecore


    【解决方案1】:

    您可以使用 Sitecore 中的 <sc:sublayout ... /> 控件来完成此操作。

    首先,您需要为那些访问 DataSource 项的每个子布局设置。 Here is sample code I've blogged on the topic.

    接下来,您需要重复子元素并将它们绑定到子布局控件,同时将每个项目作为数据源传入:

    前端:

    <asp:Repeater ID="myRepeater" OnItemDataBound="myRepeater_ItemDataBound" runat="server">
      <ItemTemplate>
        <sc:sublayout ID="scSublayout" Path="path/to/your/sublayout/file.ascx" runat="server" />
      </ItemTemplate>
    </asp:Repeater>
    

    代码隐藏:

    // in the Page_Load
    myRepeater.DataSource = homeItem.GetChildren();
    myRepeater.DataBind();
    
    protected void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
      {
        var scSublayout = e.Item.FindControl("scSublayout") as Sitecore.Web.UI.WebControls.Sublayout;
        if (scSublayout != null)
        {
            scSublayout.DataSource = ((Sitecore.Data.Items.Item)e.Item.DataItem).ID.ToString();
        }
      }
    }
    

    【讨论】:

    • 试试这个就知道了,稍后会发布结果。
    • 太好了——我假设您了解中继器,并且只需要在模板中使用 &lt;sc:sublayout ... /&gt; 控件,但如果不是,我很乐意澄清。
    • 我只看到一个问题。 1) 是的,在页面上的布局或其他子布局中。你的选择。
    • e.Item Item 似乎没有定义我需要为 Item 获取任何参考资料吗?
    • 通过RepeaterItemEventArgs e得到它
    【解决方案2】:

    从您问题的措辞看来,您似乎希望能够显示所有子项,无论其类型如何。您在这里的困难将是确定使用哪个子布局来显示每个孩子。

    Sitecore 不会将项目绑定到单个子布局。首先,它可以绑定一系列子布局,其次,在项目级别指定哪些子布局绑定到它(您可以在模板标准值上设置默认呈现细节,但这可以被项目本身覆盖),第三,根据正在查看的设备上下文,该项目可能具有与其绑定的不同子布局。除非您找到一种方法将项目配置为具有单个子布局以供父项目循环使用时使用,否则您很可能最终得到一些非常混乱的东西(许多子布局被解包,渲染,嵌套 - 标记相同的占位符)或非常不灵活的东西(一个项目只能有一个子布局,并且这个子布局在它的行为方式上是有限的)。

    更好的方法是准确确定您希望在与同级项目一起查看时显示的每种项目类型的具体内容。如果您正在从每个项目中寻找相似的信息,那么请获取此信息,并可能将其用作您的所有项目在某个级别派生的模板的基础(因此它们都有共同的字段)。然后编写一个执行循环的子布局,并且可以使用类似转发器的东西来为每个项目获取相同的字段。

    如果您的项目完全不同,那么您的循环子布局将必须能够匹配不同的案例并包含或使用每个案例的相关渲染。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-10-29
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 2015-01-25
      相关资源
      最近更新 更多