пятница, 5 августа 2011 г.

Программный доступ к элементам навигации SharePoint

Начну с того что настройка навигации осуществляется на странице «Параметры структуры переходов узла».


Доступ к этой странице можно получить через параметры сайта перейдя к пункту «Переходы», либо (при включённой публикации) через пункт главного меню «Изменить структуру переходов».

По отношению к сайтам навигация бывает
  • Глобальная
  • Текущая
По расположению на странице, навигация делится на
  • Верхнюю панель навигации
  • Панель быстрого запуска
Глобальная навигация — навигация общая для всех сайтов, в текущей коллекции сайтов.
Текущая навигация — это, соответственно, навигация, присущая текущему сайту.
Верхняя панель навигации — панель, находящаяся под заголовком и логотипом, обычно отображающая названия сайтов в коллекции:
Панель быстрого запуска — левая панель, содержащая ссылки на библиотеки документов, ссылки и т.п.:

Программный доступ к навигации осуществляется через объект Navigation, находящийся в SPWeb.
//Глобальная навигация
var globalNodes = web.Navigation.GlobalNodes;
//Ветвь домашней страницы
var homeNode = web.Navigation.Home;
//Быстрый запуск
var quickLaunch = web.Navigation.QuickLaunch;
//Верхняя панель навигации
var topNavigationBar = web.Navigation.TopNavigationBar;

Каждый из этих элементов (кроме Home) представляет собой коллекцию ветвей навигации (SPNavigationNode).
Рассмотрим основные их свойства:
foreach (SPNavigationNode node in topNavigationBar)
{
    //Название
    var nodeTitle = node.Title;
    //URL-адрес
    var nodeUrl = node.Url;
    //Видимость
    var nodeVisibility = node.IsVisible;
    //Локальность
    var nodeTargetLocation = node.IsExternal;
    //Аудитория
    var nodeAudience = node.Properties["Audience"] == null ? string.Empty : node.Properties["Audience"].ToString();
    //Тип
    var nodeType = node.Properties["NodeType"] == null ? string.Empty : node.Properties["NodeType"].ToString();
    //Описание
    var nodeDescription = node.Properties["Description"] == null ? string.Empty : node.Properties["Description"].ToString();
    //Вариант открытия ссылки
    var nodeTarget = node.Properties["Target"] == null ? string.Empty : node.Properties["Target"].ToString();
    //Вложенные ветви
    var subNodes = node.Children;
}

Рассмотрим каждый пункт отдельно.
Название, URL-адрес, Вариант открытия ссылки, Описание и Аудиторию мы можем увидеть в окне создания/изменения ссылки на сайте.

Вариант открытия ссылки — возвращает либо пустую строку или «_self», и тогда ссылка будет открываться в том же окне, либо возвращает значение «_blank» и ссылка будет открываться в новом окне.
Про аудитории мы уже говорили, см. предыдущие посты.
Видимость —  данные параметр должен определять, скрыта ли ссылка, но он, к сожалению не работает. 
Локальность — определяет, указывает ли ссылка на локальный ресурс или внешний (true — внешний)
Тип ветви — может принимать следующие значения (все возможные значения можно найти в перечислении NodeTypes):
  • Area — для элементов типа «Сайт»:
  • Heading — для элементов типа «Папка»:
  • AuthoredLinkPlain — для элементов типа «Ссылка»:
  • Page — для элементов типа «Страница»:
Теперь поговорим о настройках навигации, о программном доступе к ним:
Для доступа к ним нам понадобится объект PublishingWeb (находится в библиотеке Microsoft.SharePoint.Publishing).
var publishingWeb = PublishingWeb.GetPublishingWeb(web);

//Показать дочерние узлы
var showSubSites = publishingWeb.IncludeSubSitesInNavigation;
//Отображать страницы
var showPages = publishingWeb.IncludePagesInNavigation;
//Тип сортировки
var ordering = publishingWeb.NavigationOrderingMethod;
//Поле сортировки
var sotringField = publishingWeb.NavigationAutomaticSortingMethod;
//Направление сортировки
var sortDirection = publishingWeb.NavigationSortAscending;

(для SharePoint 2010 эти свойства располагаются в объекте publishingWeb.Navigation)
Отображать страницы — определяет, надо ли отображать страницы из системной библиотеки «Страницы»
Тип сортировки — перечисление, может принимать значения:
  • OrderingMethod.Automatic — Сортировать автоматически
  • OrderingMethod.Manual — Сортировать вручную
  • OrderingMethod.ManualWithAutomaticPageSorting — Сортировать страницы автоматически
Поле сортировки — перечисление, может принимать значения:
  • AutomaticSortingMethod.Title — Сортировка по названию
  • AutomaticSortingMethod.CreatedDate — Сортировка по дате создания
  • AutomaticSortingMethod.LastModifiedDate — Сортировка по дате изменения
Направление сортировки — по алфавиту или в обратном порядке (true — по алфавиту)
Кроме этих свойств, PublishingWeb даёт доступ к текущей структуре навигации:
var currentNodes = publishingWeb.CurrentNavigationNodes;

А ещё проверить видимость элемента. Так например проверяется видимость страниц:
if (node.GetProperty("NodeType") == NodeTypes.Page.ToString())
{
    if (!publishingWeb.IncludePagesInNavigation)
        return false;

    var pPages = publishingWeb.GetPublishingPages();
    var pPage = pPages[nn.Url];
    if (pPage != null && !pPage.IncludeInGlobalNavigation)
        return false;
} 

Всем приятного программирования!