且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

(Sitecore)带有子导航的导航

更新时间:2023-10-31 21:19:52

基本上,您将希望在要在导航上显示的层数(或维度")上嵌套嵌套的中继器.请参见下面的示例.

Essentially you will want to have nested repeaters on the number of levels (or "dimensions") you want to display on your navigation. See an example below.

<asp:Repeater runat="server" ID="TopNavRepeater" OnItemDataBound="TopNavRepeater_OnItemDataBound">
    <ItemTemplate>
        <sc:Link runat="server" ID="sclTopLink" Field="__Display Name" />
        <asp:Repeater runat="server" ID="SecondNavRepeater" OnItemDataBound="SecondNavRepeater_OnItemDataBound">
            <ItemTemplate>
                 <sc:Link runat="server" ID="sclSecondLink" Field="__Display Name" />
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

您将希望将每个项目的子级绑定到顶部转发器,并将其绑定到第二个转发器.通过设置OnItemDataBound事件上的项目"和字段",使用Sitecore链接控件呈现到页面的链接.

You will want to get the children of each Item bound to the Top Repeater and bind it to the second Repeater. Use Sitecore Link Controls to render the links to the pages by settings the Items, and Fields, on the OnItemDataBound event.

请参见下面的粗略示例

protected void Page_Load(object sender, EventArgs e)
{
    TopNavRepeater.DataSource = YourHomeItem.Children();
    TopNavRepeater.DataBind();
}

protected void TopNavRepeater_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var item = e.Item.DataItem as Item;
        if (item == null)
            return;

        var sclTopLink = e.Item.FindControl("sclTopLink") as Link;
        var SecondNavRepeater = e.Item.FindControl("SecondNavRepeater") as Repeater;

        if (sclTopLink != null)
        {
            sclTopLink.Item = item;
        }

        if (SecondNavRepeater != null)
        {
            SecondNavRepeater.DataSource = item.Children;
            SecondNavRepeater.DataBind();
        }
    }
}