Делаем сайт на SharePoint 2010. Построение иерархии страниц

Сайт на SharePoint 2010. Брендинг
Сайт на SharePoint 2010. Оптимизация
Сайт на SharePoint 2010. Брендинг Wiki-страниц
Сайт на SharePoint 2010. Построение иерархии страниц

Сегодня я покажу как можно построить иерархическую зависимость страниц интернет-сайта, созданного на базе MS SharePoint 2010.

Навигация в SharePoint 2010

Расширение функционала вики-страниц

Основой доставки контента интернет-сайта будут вики-страницы. Первое, что надо сделать - расширить стандартный функционал вики-страниц. Для этого создадим новый тип содержимого, унаследовав его от стандартного типа содержимого (Вики-страница). Добавим туда следующие поля:

  • PageTitle - заголовок страницы. Понадобится для отображения названия страницы в интерфейсе, т.к. имена страниц (имена файлов) будут на латинице;
  • PageHeaderTitle - заголовок страницы, который будем подставлять в header страницы;
  • ShowInSiteMap - флаг, отвечающий за отображение страницы в навигации сайта;
  • ParentWikiPage - Lookup-поле, указывающее родительскую страницу;
  • ChildPages - Backward-ссылка на дочерние страницы через lookup-поле ParentWikiPages.

Перечень этих свойств можно по желанию изменить, например добавив период отображения информации и прочее.

Модель данных

Излишне упоминать, что работать с данными мы будем, используя мой любимый Linq to SharePoint. И наша модель данных будет выглядеть примерно следующим образом:

Напомню про необходимость использования обертки поверх Linq to SharePoint, т.к. он не работает в анонимном режиме.

SiteWikiPageInfo

Также создадим небольшой класс, содержащий минимум информации, необходимой для построение иерархического списка страниц и, в дальнейшем, для реализации своего SiteMapProvider'а.

  1. public class SiteWikiPageInfo
  2. {
  3.     public int Id { getset; }
  4.     public string Title { getset; }
  5.     public string Description { getset; }
  6.     public string ServerUrl { getset; }
  7.     public bool Visible { getset; }
  8. }

Этот класс необходим для того, чтобы не выбирать само содержимое страницы (поле WikiField) во избежание неоправданной нагрузки на сервер. Так как наш класс SiteWikiPageInfo к спискам SharePoint не привязан. Получать данные именно этого типа мы будем следующим образом:

  1. // Создаем контекст
  2. using(var ctx = new SPDataContext(siteUrl))
  3. {
  4.     // Отключаем треккинг
  5.     ctx.ObjectTrackingEnabled = false;
  6.     var pageInfos = ctx.Pages
  7.         // Выбираем данные из всех папок
  8.         .ScopeToFolder(string.Empty, true)
  9.         // "Провоцируем" Linq to SharePoint 
  10.         // на использование элемента ViewFields
  11.         // при построении CAML-запроса
  12.         .Select(page => new SiteWikiPageInfo
  13.                             {
  14.                                 Id = page.Id,
  15.                                 Title = page.PageTitle,
  16.                                 Description = string.Empty,
  17.                                 ServerUrl = page.ServerUrl,
  18.                                 Visible = page.ShowInSiteMap,
  19.                                 ParentId = page.ParentWikiPageId
  20.                             })
  21.         .ToList();
  22. }

Создание страниц

Для создание стандартных вики-страниц SharePoint использует форму по адресу /_layouts/CreateWebPage.aspx, в которой можно задать только имя страницы. При желании в своем типе содержимого можно переопределить эту форму, чтобы пользователи могли сразу указать родительскую страницу и прочие параметры. Как это делать я уже писал.

Свой SiteMapProvider в SharePoint

Теперь все готово для того, чтобы написать свой провайдер для навигации SharePoint. Для этого нам понадобится класс, унаследованный от класса System.Web.SiteMapProvider и зарегистрированный в соответствующем разделе в web.config. Этой теме я посвящу отдельный пост.

Результат

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

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

Травку для бэкграунда я взял из Google Chrome.

При этом интерфейс редакторов остается неизменным. Также сохранена функциональность выбора разметки страницы:

Выбор макета вики-страницы в SharePoint 2010

Следующий пост будет посвящен созданию и использованию своего провайдера для навигации по SharePoint.


Поделиться

Коментарии