Добавление ссылок на верхнюю панель ссылок
Дата последнего изменения: 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, чтобы добавить узел в верхнюю панель ссылок.
Чтобы добавить ссылку в верхнюю панель ссылок, выполните следующие действия:
Проверьте значение свойства SPWeb.Navigation.UseShared и убедитесь, что у веб-сайта имеется собственная верхняя панель ссылок, а не унаследованная от родительского сайта.
Если UseShared имеет значение false, то у веб-сайта есть собственная верхняя панель ссылок, и в нее можно добавлять элементы. Если свойство имеет значение true, на веб-сайте используется верхняя панель ссылок родительского сайта. В этом случае можно добавить ссылку в верхнюю панель ссылок родительского сайта или поместить ее в меню панели быстрого запуска дочернего сайта.
Проверьте наличие дубликатов ссылок.
Одним из способов такой проверки является вызов метода SPWeb.Navigation.GetNodeByUrl с передачей в качестве аргумента URL-адреса предлагаемой ссылки. Если ссылка с таким URL-адресом не найдена, то метод GetNodeByUrl возвращает значение null.
Если ссылка обнаружена, метод возвращает объект SPNavigationNode. Однако ссылка может находиться в меню панели быстрого запуска, а не в верхней панели ссылок. Чтобы проверить, включена ли существующая ссылка в верхнюю панель ссылок, проверьте значение свойства ParentId возвращенного узла. ИД верхней панели ссылок всегда равен 1002.
Если рассматриваемой ссылки в верхней панели ссылок еще нет, воспользуйтесь одним из конструкторов класса SPNavigationNode, чтобы создать для нее узел перехода.
У класса имеется два конструктора.
У первого конструктора есть два аргумента: строка с отображаемым текстом для ссылки и другая строка с URL-адресом для ссылки. Этот конструктор следует использовать только для внутренних ссылок — ссылок на контент в том же семействе веб-сайтов. URL-адрес должен задаваться относительно сервера.
У второго конструктора есть три аргумента. Первые два аргумента такие же, как у первого конструктора. Третий аргумент — это значение типа boolean, которое указывает, является ли ссылка внешней или внутренней. Передайте значение true для ссылки на внешний веб-сайт и укажите абсолютный URL-адрес во втором аргументе. Для внутренней ссылки передайте значение false и относительный URL-адрес для сервера.
Получите ссылку на объект SPNavigationNodeCollection, который представляет верхнюю панель ссылок, получив значение свойства SPWeb.Navigation.TopNavigationBar.
Вызовите метод класса 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
См. также
Задачи
Концепции
Совместное использование верхней панели ссылок разными сайтами
Практическое руководство. Настройка отображения верхней панели ссылок