Делаем сайт на SharePoint 2010. Построение иерархии страниц
Сайт на SharePoint 2010. Брендинг
Сайт на SharePoint 2010. Оптимизация
Сайт на SharePoint 2010. Брендинг Wiki-страниц
Сайт на SharePoint 2010. Построение иерархии страниц
Сегодня я покажу как можно построить иерархическую зависимость страниц интернет-сайта, созданного на базе MS SharePoint 2010.
Расширение функционала вики-страниц
Основой доставки контента интернет-сайта будут вики-страницы. Первое, что надо сделать - расширить стандартный функционал вики-страниц. Для этого создадим новый тип содержимого, унаследовав его от стандартного типа содержимого (Вики-страница). Добавим туда следующие поля:
- PageTitle - заголовок страницы. Понадобится для отображения названия страницы в интерфейсе, т.к. имена страниц (имена файлов) будут на латинице;
- PageHeaderTitle - заголовок страницы, который будем подставлять в header страницы;
- ShowInSiteMap - флаг, отвечающий за отображение страницы в навигации сайта;
- ParentWikiPage - Lookup-поле, указывающее родительскую страницу;
- ChildPages - Backward-ссылка на дочерние страницы через lookup-поле ParentWikiPages.
Перечень этих свойств можно по желанию изменить, например добавив период отображения информации и прочее.
Модель данных
Излишне упоминать, что работать с данными мы будем, используя мой любимый Linq to SharePoint. И наша модель данных будет выглядеть примерно следующим образом:
Напомню про необходимость использования обертки поверх Linq to SharePoint, т.к. он не работает в анонимном режиме.
SiteWikiPageInfo
Также создадим небольшой класс, содержащий минимум информации, необходимой для построение иерархического списка страниц и, в дальнейшем, для реализации своего SiteMapProvider'а.
- public class SiteWikiPageInfo
- {
- public int Id { get; set; }
- public string Title { get; set; }
- public string Description { get; set; }
- public string ServerUrl { get; set; }
- public bool Visible { get; set; }
- }
Этот класс необходим для того, чтобы не выбирать само содержимое страницы (поле WikiField) во избежание неоправданной нагрузки на сервер. Так как наш класс SiteWikiPageInfo к спискам SharePoint не привязан. Получать данные именно этого типа мы будем следующим образом:
- // Создаем контекст
- using(var ctx = new SPDataContext(siteUrl))
- {
- // Отключаем треккинг
- ctx.ObjectTrackingEnabled = false;
- var pageInfos = ctx.Pages
- // Выбираем данные из всех папок
- .ScopeToFolder(string.Empty, true)
- // "Провоцируем" Linq to SharePoint
- // на использование элемента ViewFields
- // при построении CAML-запроса
- .Select(page => new SiteWikiPageInfo
- {
- Id = page.Id,
- Title = page.PageTitle,
- Description = string.Empty,
- ServerUrl = page.ServerUrl,
- Visible = page.ShowInSiteMap,
- ParentId = page.ParentWikiPageId
- })
- .ToList();
- }
Создание страниц
Для создание стандартных вики-страниц SharePoint использует форму по адресу /_layouts/CreateWebPage.aspx, в которой можно задать только имя страницы. При желании в своем типе содержимого можно переопределить эту форму, чтобы пользователи могли сразу указать родительскую страницу и прочие параметры. Как это делать я уже писал.
Свой SiteMapProvider в SharePoint
Теперь все готово для того, чтобы написать свой провайдер для навигации SharePoint. Для этого нам понадобится класс, унаследованный от класса System.Web.SiteMapProvider и зарегистрированный в соответствующем разделе в web.config. Этой теме я посвящу отдельный пост.
Результат
В результате мы получаем автоматизированную навигацию по сайту, которая не требует к себе никакого внимания: все данные отражены в параметрах наших вики-страниц.
В дополнение к посту, посвященному брендингу вики-страниц я изменил макет страницы, предназначенной для посетителей интернет-сайта для большей наглядности. Теперь посетители будут видеть это:
Травку для бэкграунда я взял из Google Chrome.
При этом интерфейс редакторов остается неизменным. Также сохранена функциональность выбора разметки страницы:
Следующий пост будет посвящен созданию и использованию своего провайдера для навигации по SharePoint.