Поделиться через


Добавление ссылок на верхнюю панель ссылок

Дата последнего изменения: 1 ноября 2010 г.

Применимо к: SharePoint Foundation 2010

На веб-сайте Microsoft SharePoint Foundation верхняя панель ссылок представляет собой ленту с вкладками, которая находится сразу под заголовком и описанием веб-сайта. В объектной модели SharePoint Foundation структура переходов верхней панели ссылок представляется в виде коллекции объектов SPNavigationNode. Для добавления ссылок нужно добавить объекты SPNavigationNode в коллекцию верхней панели ссылок.

Добавление ссылок

Верхняя панель ссылок веб-сайта представляется экземпляром класса SPNavigationNodeCollection. Эту коллекцию можно получить, обратившись к свойству SPWeb.Navigation веб-сайта, которое возвращает объект SPNavigation, и затем обратившись к свойству TopNavigationBar этого объекта.

SPNavigationNodeCollection topnav = web.Navigation.TopNavigationBar;
Dim topnav As SPNavigationNodeCollection = web.Navigation.TopNavigationBar
Предупреждающая заметкаВнимание!

Если на веб-сайте настроено использование верхней панели ссылок с родительского сайта, его свойство SPWeb.Navigation.TopNavigationBar имеет значение null.

Получив коллекцию, можно создать объект SPNavigationNode для новой ссылки и затем вызвать метод класса SPNavigationNodeCollection, чтобы добавить узел в верхнюю панель ссылок.

Чтобы добавить ссылку в верхнюю панель ссылок, выполните следующие действия:

  1. Проверьте значение свойства SPWeb.Navigation.UseShared и убедитесь, что у веб-сайта имеется собственная верхняя панель ссылок, а не унаследованная от родительского сайта.

    Если UseShared имеет значение false, то у веб-сайта есть собственная верхняя панель ссылок, и в нее можно добавлять элементы. Если свойство имеет значение true, на веб-сайте используется верхняя панель ссылок родительского сайта. В этом случае можно добавить ссылку в верхнюю панель ссылок родительского сайта или поместить ее в меню панели быстрого запуска дочернего сайта.

  2. Проверьте наличие дубликатов ссылок.

    Одним из способов такой проверки является вызов метода SPWeb.Navigation.GetNodeByUrl с передачей в качестве аргумента URL-адреса предлагаемой ссылки. Если ссылка с таким URL-адресом не найдена, то метод GetNodeByUrl возвращает значение null.

    Если ссылка обнаружена, метод возвращает объект SPNavigationNode. Однако ссылка может находиться в меню панели быстрого запуска, а не в верхней панели ссылок. Чтобы проверить, включена ли существующая ссылка в верхнюю панель ссылок, проверьте значение свойства ParentId возвращенного узла. ИД верхней панели ссылок всегда равен 1002.

  3. Если рассматриваемой ссылки в верхней панели ссылок еще нет, воспользуйтесь одним из конструкторов класса SPNavigationNode, чтобы создать для нее узел перехода.

    У класса имеется два конструктора.

    • У первого конструктора есть два аргумента: строка с отображаемым текстом для ссылки и другая строка с URL-адресом для ссылки. Этот конструктор следует использовать только для внутренних ссылок — ссылок на контент в том же семействе веб-сайтов. URL-адрес должен задаваться относительно сервера.

    • У второго конструктора есть три аргумента. Первые два аргумента такие же, как у первого конструктора. Третий аргумент — это значение типа boolean, которое указывает, является ли ссылка внешней или внутренней. Передайте значение true для ссылки на внешний веб-сайт и укажите абсолютный URL-адрес во втором аргументе. Для внутренней ссылки передайте значение false и относительный URL-адрес для сервера.

  4. Получите ссылку на объект SPNavigationNodeCollection, который представляет верхнюю панель ссылок, получив значение свойства SPWeb.Navigation.TopNavigationBar.

  5. Вызовите метод класса SPNavigationNodeCollection, чтобы добавить узел в коллекцию.

    Чтобы сделать узел первым узлом на панели, вызовите метод AddAsFirst. Чтобы сделать его последним узлом на панели, вызовите метод AddAsLast. Чтобы вставить его после другого узла, вызовите метод Add.

ПримечаниеПримечание

Объект SPNavigationNode будет полностью инициализирован только после добавления в коллекцию. Если объект еще не является элементом коллекции, свойства "только для чтения", такие как Id и ParentId, возвращают значение null.

Пример

В консольном приложении в следующем примере происходит перебор коллекции веб-сайтов в семействе веб-сайтов и для каждого веб-сайта ссылка на него добавляется в верхнюю панель ссылок на корневом веб-сайте семейства. Перед добавлением ссылки приложение проверяет, имеется ли уже эта ссылка в панели.

using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("https://localhost"))
            using (SPWeb web = site.OpenWeb())
            {
                if (web.Navigation.UseShared) 
                    return; 

                // Get the top link bar.
                SPNavigationNodeCollection topnav = web.Navigation.TopNavigationBar;

                // Iterate over the collection of subsites.
                foreach (SPWeb subweb in web.Webs)
                {
                    // Check for an existing link.
                    SPNavigationNode node = web.Navigation.GetNodeByUrl(subweb.ServerRelativeUrl);
                    if (node == null || node.ParentId != 1002)
                    {
                        // No link, so add one.

                        // Truncate a long title.
                        string linkTitle = subweb.Title;
                        if (linkTitle.Length > 15)
                            linkTitle = linkTitle.Substring(0, 12) + "...";

                        // Create the link.
                        node = new SPNavigationNode(linkTitle, subweb.ServerRelativeUrl);

                        // Add it to the top link bar.
                        node = topnav.AddAsLast(node);
                    }
                    subweb.Dispose();
                }
            }
            Console.Write("\nPress ENTER to continue....");
            Console.ReadLine();
        }
    }
}
Imports System
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Navigation

Module ConsoleApp

    Sub Main()

        Using site As New SPSite("https://localhost")
            Using web As SPWeb = site.OpenWeb()

                If web.Navigation.UseShared Then
                    Return
                End If

                ' Get the top link bar.
                Dim topnav As SPNavigationNodeCollection = web.Navigation.TopNavigationBar

                ' Iterate over the collection of subsites.
                For Each subweb As SPWeb In web.Webs
                    ' Check for an existing link.
                    Dim node As SPNavigationNode = web.Navigation.GetNodeByUrl(subweb.ServerRelativeUrl)
                    If node Is Nothing OrElse node.ParentId <> 1002 Then

                        ' No link, so add one.

                        ' Truncate a long title.
                        Dim linkTitle As String = subweb.Title
                        If linkTitle.Length > 15 Then
                            linkTitle = linkTitle.Substring(0, 12) + "..."
                        End If

                        ' Create the link.
                        node = New SPNavigationNode(linkTitle, subweb.ServerRelativeUrl)

                        ' Add it to the top link bar.
                        node = topnav.AddAsLast(node)
                    End If
                    subweb.Dispose()
                Next

            End Using
        End Using

        Console.Write(vbCrLf & "Press ENTER to continue....")
        Console.Read()
    End Sub

End Module

См. также

Задачи

Практическое руководство. Добавление ссылки на дочерний сайт на верхнюю панель ссылок или в меню быстрого запуска

Концепции

Совместное использование верхней панели ссылок разными сайтами

Практическое руководство. Настройка отображения верхней панели ссылок