Делаем сайт на SharePoint 2010. Брендинг Wiki-страниц
Сайт на SharePoint 2010. Брендинг
Сайт на SharePoint 2010. Оптимизация
Сайт на SharePoint 2010. Брендинг Wiki-страниц
Сайт на SharePoint 2010. Построение иерархии страниц
Небольшой пост-дополнение к брендингу интернет-сайта на SharePoint 2010. Сегодня я расскажу, как задействовать описанный механизм применения динамических master-страниц к вики-страницам сайта.
Страница для отображения Wiki-страниц
Страница, которая отвечает за отображение вики-страниц находится по адресу {SharePooint Folder}/TEMPLATE/DocumentTemplates/wkpstd.aspx. Чтобы подставлять master-страницу для посетителей интернет сайта понадобится свой класс (именоваться у меня проекте он будет FluentWikiEditPage), который будет проверять помимо анонимности пользователя шаблон текущего сайта. Последнее необходимо, чтобы не повлиять на поведение других сайтов/коллекции сайтов.
Проверять, является ли шаблон текущего сайта нашим, мы будем по его ID, который задается в CAML-определении сайта:
- <?xml version="1.0" encoding="utf-8"?>
- <Templates xmlns:ows="Microsoft SharePoint">
- <Template Name="ZhukBlog.InternetSite.SiteDefinition" ID="10000">
- <Configuration ID="0" Title="Квантум Арт. Интернет сайт"
- Hidden="FALSE" ImageUrl="/_layouts/images/CPVW.gif"
- Description="" DisplayCategory="ZhukBlog">
- </Configuration>
- </Template>
- </Templates>
Весь код класса я приводить не буду, т.к. вскоре опубликую исходные коды демонстрационного проекта. Здесь важен только метод OnPreInit, в котором мы будем проверять шаблон сайта, используя свойство WebTemplateId объекта SPWeb:
- public class FluentWikiEditPage : WikiEditPage
- {
- protected override void OnPreInit(EventArgs e)
- {
- base.OnPreInit(e);
- var web = SPContext.Current.Web;
- // Проверяем является ли шаблон сайта нашим по его ID
- if (web.WebTemplateId != 10000) return;
- if (IsAnonymous)
- SetAnonymousView();
- else
- SetModeratorView();
- }
-
- //...
- }
В остальном класс FluentWikiEditPage аналогичен классу FluentWebPartPage.
wkpstd.aspx в проекте Visual Studio
Чтобы заменить файл wkpstd.aspx в SharePoint, надо "замапить" папку {SharePooint Folder}/TEMPLATE/DocumentTemplates и скопировать туда исходный файл.
Теперь в файле wkpstd.aspx можно изменить директиву Page, чтобы страница была унаследована от нашего нового класса:
- <@% Page
- Language="C#"
- Inherits="ZhukBlog.InternetSite.Branding.FluentWikiEditPage,
- ZhukBlog.InternetSite.Branding,Version=1.0.0.0, Culture=neutral,PublicKeyToken=..."
- MasterPageFile="~masterurl/default.master"%>
Адаптация "гостевой" master-page под вики-страницы
Также необходимо модифицировать файл v4.quest.master нашего проекта.
Во-первых, вернуть на страницу часть ContentPlaceHolder элементов:
- <asp:ContentPlaceHolder id="PlaceHolderLeftActions"
- Visible="false" runat="server" />
- <asp:ContentPlaceHolder id="PlaceHolderPageImage"
- Visible="false" runat="server" />
- <asp:ContentPlaceHolder id="PlaceHolderPageDescription"
- Visible="false" runat="server" />
- <asp:ContentPlaceHolder id="PlaceHolderAdditionalPageHead"
- runat="server" Visible="false" />
- <asp:ContentPlaceHolder id="PlaceHolderMiniConsole"
- runat="server" Visible="false" />
- <asp:ContentPlaceHolder id="PlaceHolderPageTitleInTitleArea"
- runat="server" Visible="false" />
Здесь у всех указан атрибут Visible равным false. Задействовать эти контролы у себя на проекте или нет решайте сами.
Во-вторых, вики-страницы требует наличия контрола Ribbon на странице (в случае, если версия интерфейса = 4). Происходит это из-за некорректно написанного метода Microsoft.SharePoint.WebControls.SPPageStateControl.OnInit (часть метода):
- if ((SPPageStateContext.ContextualWeb != null)
- && (SPPageStateContext.ContextualWeb.UIVersion >= 4))
- {
- this.RibbonTrimmer = new RibbonTrimmer(SPRibbon.GetCurrent(this.Page));
- }
Не хватает здесь проверки на то, что Ribbon'а может и не быть на странице. Необходимый минимум для удовлетворения этих потребностей выглядит вот так:
- <SharePoint:SPRibbon runat="server" Visible="false" />
Результаты
Wiki-страницы теперь функционируют согласно общему требованию: функционал редакторов остается неизменным, посетители видят "минимум" SharePoint: