Пользовательский SitemOppider не показывает уровень 2 или глубже

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/76132

Вопрос

Я создал пользовательский поставщик сайта, но я не могу сделать его показывать следующий уровень.

Вот моя первая попытка:

public override SiteMapNodeCollection GetChildNodes(SiteMapNode node)
{
        var collection = new SiteMapNodeCollection();
        var pNode = node as PortalSiteMapNode;

        if (node.ParentNode == null)
        {
            PortalSiteMapNode global = new PortalSiteMapNode(pNode.WebNode, "1", NodeTypes.Area, "http://sharepoint2013/", "1", "1");
            global.ParentNode = node;
            collection.Add(global);
        }
        else if (node.Key == "1")
        {
            PortalSiteMapNode global2 = new PortalSiteMapNode((node.ParentNode as PortalSiteMapNode).WebNode, "1.1", NodeTypes.Area, "http://sharepoint2013/level1", "1.1", "1.1");
            global2.ParentNode = node;
            collection.Add(global2);
        }
        return collection;
}
.

Вот моя вторая попытка (рекурсивная):

public override SiteMapNodeCollection GetChildNodes(SiteMapNode node)
        {
            var collection = new SiteMapNodeCollection();
            var pNode = node as PortalSiteMapNode;

            if (node.ParentNode == null)
            {
                PortalSiteMapNode level1 = new PortalSiteMapNode(pNode.WebNode, "1", NodeTypes.Area, "http://sharepoint2013/", "1", "1");
                level1.ParentNode = node;
                collection.Add(level1);

                PortalSiteMapNode level2 = new PortalSiteMapNode(level1.WebNode, "1.1", NodeTypes.Area, "http://sharepoint2013/", "1.1", "1.1");
                level1.ChildNodes.Add(level2);
            }


            return collection;
        }
.

Вот делегат Control XML:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Control Sequence="30"
           Id="QuickLaunchDataSource"
           ControlClass="Microsoft.SharePoint.Publishing.Navigation.PortalSiteMapDataSourceSwitch"
           ControlAssembly="Microsoft.SharePoint.Publishing, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
    <Property Name="ID">QuickLaunchSiteMap</Property>
    <Property Name="SiteMapProvider">MyQuicklaunchProvider</Property>
    <Property Name="EnableViewState">false</Property>
    <Property Name="StartFromCurrentNode">false</Property>
    <Property Name="ShowStartingNode">false</Property>
    <Property Name="TreatStartingNodeAsCurrent">false</Property>
    <Property Name="TrimNonCurrentTypes">Heading</Property>
  </Control>
</Elements>
.

Результат всегда это:

Введите описание изображения здесь

Я упущен здесь очевидным?Это не может быть тяжело ...

Обновление 1 : я хочу 3 или более уровней, созданных полностью с кодом.Они должны быть видны на каждой странице.

Это было полезно?

Решение 3

Хорошо, это невозможно с порталитемПословом.Его жесткозедированный.

Введите описание изображения здесь

Другие советы

Вы должны установить «SHOWSTARTINGNODE= TRUE» в делегатов управления свойствами пользовательского поставщика сайта.Установка его в false делает его для пропуска корнеплода в иерархии сайта.

public override SiteMapNodeCollection GetChildNodes(System.Web.SiteMapNode node)
{
    PortalSiteMapNode portalNode = node as PortalSiteMapNode;
    if (portalNode != null)
    {
       if (portalNode.Type == NodeTypes.Area)
       {
           SiteMapNodeCollection nodeColl = base.GetChildNodes(portalNode);
           SPWeb currentWeb = SPContext.Current.Web;
           PortalSiteMapNode level1 = new PortalSiteMapNode(pNode.WebNode, "1", NodeTypes.Area, "http://sharepoint2013/", "1", "1");


           nodeColl.Add(level1);

           for (int i = 0; i < 20; i++)
           {
                PortalSiteMapNode level2 = new PortalSiteMapNode(level1.WebNode, "1.1" + i, NodeTypes.Area, "http://sharepoint2013/", "1.1", "1.1");
                level1.ChildNodes.Add(level2);
           }
           return nodeColl;
       }
       else
       {
       return base.GetChildNodes(portalNode);
   }
   else
   {
      return new SiteMapNodeCollection();
   }
}
.

http://social.msdn.microsoft.com/forums/sharepoint/fr-fr/734cfd61-cce8-4Adb-9d4f-d77bf42f815e/inserting-a-portalsiteMapnode- SiteMapnodeCollection - создает дубликаты

В пределах MeedPage вам нужно что-то так:

<sharepoint:aspmenuid=”topnavigationmenu” runat=”server” datasourceid=”topSiteMap1″ enableviewstate=”false” accesskey=”">” Orientation=”Horizontal” StaticDisplayLevels=”3″ MaximumDynamicDisplayLevels=”3″ DynamicHorizontalOffset=”0″ StaticPopoutImageUrl=”/_layouts/images/menudark.gif” StaticPopoutImageTextFormatString=”" DynamicHoverStyle-BackColor=”#CBE3F0″ SkipLinkText=”" StaticSubMenuIndent=”0″ CssClass=”ms-topNavContainer”> 

<staticmenustyle/><staticmenuitemstyle cssclass=”ms-topnav” itemspacing=”0px”/><staticselectedstyle cssclass=”ms-topnavselected”/><statichoverstyle cssclass=”ms-topNavHover”/><dynamicmenustyle backcolor=”#F2F3F4″ bordercolor=”#A7B4CE” borderwidth=”1px”/><dynamicmenuitemstyle cssclass=”ms-topNavFlyOuts”>/><dynamicselectedstyle cssclass=”ms-topNavFlyOutsSelected”/></SharePoint:AspMenu> 
<asp:sitemapdatasource showstartingnode=”False” sitemapprovider=”MyCustomNavigationProvider” id=”topSiteMap1″ runat=”server” startfromcurrentnode=”true”> 
.

http://msdn.microsoft.com /en-us/library/ms466994(v=Office.14).aspx

и

Добавить это:

ShowStartingNode= «False» его необходимо, чтобы быть ложным в противном случае по умолчанию его установлено значение TRUE

http:// msdn. Microsoft.com/en-us/library/system.web.ui.webcontrols.sitemapdataTasource.showstartingnode.aspx

Редактировать

Как код выше doenst работает (сделано без тестирования;) мой плохой), и я специально не знаю ошибку и какую строку это вызывает, вы можете использовать это вместо этого:

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint.Publishing;
using Microsoft.SharePoint.Publishing.Navigation;
using System.Web;
using System.Web.UI.WebControls;
using System.Configuration;

namespace MyCustomNav
{
public class Navigation: PortalSiteMapProvider
{
public override SiteMapNodeCollection GetChildNodes(System.Web.SiteMapNode 
node)
{
PortalSiteMapNode pNode = node as PortalSiteMapNode;
if (pNode != null)
{
if (pNode.Type == NodeTypes.Area)
{
SiteMapNodeCollection nodeColl = base.GetChildNodes(pNode);
PortalSiteMapNode childNode= new PortalSiteMapNode(pNode.WebNode, "1", NodeTypes.Area, "http://sharepoint2013/", "1", "1");

PortalSiteMapNode childNode1 = new PortalSiteMapNode(level1.WebNode, "1.1" + i, NodeTypes.Area, "http://sharepoint2013/", "1.1", "1.1");

nodeColl.Add(childNode);

SiteMapNodeCollection test = new SiteMapNodeCollection();
test.Add(childNode1);
childNode.ChildNodes = test;

return nodeColl;
}
else
return base.GetChildNodes(pNode);
}
else
return new SiteMapNodeCollection();
}
}
}
.

Добавьте это в web.config

<add name="MyCustomNavigationProvider" type="MyCustomNav.Navigation, MyCustomNav" 
NavigationType="Current" />
.

Добавьте это к Masterpage под ContenterAlerer

<SharePoint:AspMenu
ID="TopNavigationMenu"
  Runat="server"
  DataSourceID="topSiteMap1"
  EnableViewState="false"
  AccessKey="<%$Resources:wss,navigation_accesskey%>"
  Orientation="Horizontal"
  StaticDisplayLevels="1"
  MaximumDynamicDisplayLevels="3"
  DynamicHorizontalOffset="0"
  StaticPopoutImageUrl="/_layouts/images/menudark.gif"
  StaticPopoutImageTextFormatString=""
  DynamicHoverStyle-BackColor="#CBE3F0"
  SkipLinkText=""
  StaticSubMenuIndent="0"
  CssClass="ms-topNavContainer">
<StaticMenuStyle/>
<StaticMenuItemStyle CssClass="ms-topnav" ItemSpacing="0px"/>
<StaticSelectedStyle CssClass="ms-topnavselected" />
<StaticHoverStyle CssClass="ms-topNavHover" />
<DynamicMenuStyle BackColor="#F2F3F4" BorderColor="#A7B4CE" 
  BorderWidth="1px"/>
<DynamicMenuItemStyle CssClass="ms-topNavFlyOuts"/>
<DynamicHoverStyle CssClass="ms-topNavFlyOutsHover"/>
<DynamicSelectedStyle CssClass="ms-topNavFlyOutsSelected"/>
</SharePoint:AspMenu>
<asp:SiteMapDataSource
  ShowStartingNode="False"
  SiteMapProvider="MyCustomNavigationProvider"
  id="topSiteMap1"
  runat="server"
  StartFromCurrentNode="true"/>
.

Ammed код, чтобы удовлетворить ваши потребности!

http://msdn.microsoft.com /en-us/library/cc789625(v=Office.14).aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top