Добавляем новое представление для библиотеки документов используя feature
Итак, по заявкам трудящихся прямо мне в icq ;) сегодня опишу как создать представление для библиотеки документов, такое, чтобы была пустая страница с местом для веб-частей и на этой странице не было ListView.
Идея заключается в том, чтобы добавить в фичу представление, при выборе которого, открывалась бы кастомная страница с произвольным содержимым.
Приступим:
1) Копируем из папки C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES папку DocumentLibrary (это и есть та фича, которая управляет стандартной библотекой документов) и переименовываем ее, например, в CustomDocumentLibrary
2) Открываем файл feature.xml и исправляем в нем id (генерируем новый используя guid generator). Я, так же, изменю еще Title, для того, чтобы можно было проще опознать нашу фичу в списке фичу, когда мы соберемся ее активировать и выставлю HIDDEN=FALSE
3) Далее, открываем файл schema.xml и ищем в нем секцию <Views>. Никаких полей в этом примере мы добавлять не будем и Content Type'ов делать тоже не будем, а просто создадим представление.
4) Ищем секцию <View BaseViewID="1" ..> .. </View> и копируем ее чуть ниже.
5) Выставляем в <View BaseViewID="1" ..> признак DefaultView="FALSE". Таким образом, получится, что представлением, показывающимся по-умолчанию будет наше скопированное представление.
6) Меняем в скопированном View, BaseViewID на что-нибудь не существующее, например на 10. И меняем DisplayName на Test View
7) Удаляем свойство SetupPath="pages\viewpage.aspx". А Url="Forms/AllItems.aspx" изменяем на Url="Forms/CustomAllItems.aspx"
8) Открываем файл DocumentLibrary.xml и в <ListTemplate меняем свойство DisplayName например на "Custom DocLib List", чтобы можно было узнать наш список, когда будем создавать его.
9) Удаляем весь xml между тэгами <View BaseViewID="10" ..> .. </View>.
У меня получился следующий результат:
<View BaseViewID="10" Type="HTML" WebPartZoneID="Main" DisplayName="Test View" DefaultView="TRUE" MobileView="True" MobileDefaultView="True" ImageUrl="/_layouts/images/dlicon.png" Url="Forms/CustomAllItems.aspx">
<Toolbar Type="Standard">
</Toolbar>
</View>
Toolbar я оставила для того, чтобы потом можно было переключиться на другое представление и убедиться что все работает. Если он вам не нужен, то его можно тоже удалить.
10) Теперь, в той же папке, в которой лежит schema.xml создадим страницу CustomAllItems.aspx. Это и будет страницей нашего предсталения.
Страница должна выглядеть примерно так:
<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<asp:Content ContentPlaceHolderId="PlaceHolderPageTitle" runat="server"><SharePoint:ListProperty Property="Title" runat="server"/></asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderPageTitleInTitleArea" runat="server">
<SharePoint:ListProperty Property="Title" runat="server"/>
</asp:Content>
<asp:content contentplaceholderid="PlaceHolderAdditionalPageHead" runat="server">
<SharePoint:RssLink runat="server" />
</asp:content>
<asp:Content ContentPlaceHolderId="PlaceHolderSearchArea" runat="server">
<SharePoint:DelegateControl runat="server"
ControlId="SmallSearchInputBox"/>
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderPageImage" runat="server"><SharePoint:ViewIcon Width="145" Height="54" runat="server" /></asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderLeftActions" runat="server">
<SharePoint:ModifySettingsLink runat="server" />
</asp:Content>
<asp:Content ContentPlaceHolderId ="PlaceHolderBodyLeftBorder" runat="server">
<div height=100% class="ms-pagemargin"><IMG SRC="/_layouts/images/blank.gif" width=6 height=1 alt=""></div>
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
<WebPartPages:WebPartZone runat="server" FrameType="None" ID="Main" Title="loc:Main" />
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderBodyAreaClass" runat="server">
<style type="text/css">
.ms-bodyareaframe {
padding: 0px;
}
</style>
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderPageDescription" runat="server">
<p>
<SharePoint:ListProperty ID="ListProperty1" CssClass="ms-listdescription" Property="Description" runat="server"/>
</p>
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderCalendarNavigator" runat="server">
<SharePoint:SPCalendarNavigator id="CalendarNavigatorId" runat="server"/>
</asp:Content>
11) Устанавливаем нашу фичу и активируем ее.
12) Вот такое вот представление получилось у меня:

Что с этим можно делать дальше? А дальше, можно тоже используя фичи поместить на страницу CustomAllItems.aspx любые веб-части и получить собственное представление для библиотеки документов.
Скачать пример: CustomDocumentLibrary.zip (35.21 KB)