Элементы навигации
Дата последнего изменения: 1 ноября 2010 г.
Применимо к: SharePoint Foundation 2010
В этой статье
Навигатор
Верхняя панель ссылок
Панель быстрого запуска
Иерархическое представление
Хром для веб-сайта Microsoft SharePoint Foundation включает набор элементов управления, предназначенных для навигации по сайту, поиска необходимого контента, отображения сведений о текущем положении на сайте и быстрого возврата к предыдущему положению.
Разметка для этих элементов управления хранится в главной странице для домашней страницы веб-сайта. В SharePoint Foundation 2010 основной главной страницей как для страниц контента, так и для страниц приложений является страница v4.master.
Примечание |
---|
Дополнительные сведения о главных страницах по умолчанию см. в статье Главные страницы по умолчанию в SharePoint Foundation. |
На странице v4.master определяются четыре основных компонента навигации.
Навигатор
Верхняя панель ссылок
Панель быстрого запуска
Иерархическое представление
Навигатор
Навигатор — это элемент навигации, отображаемый в верхней части страниц контента на веб-сайте SharePoint Foundation на ленте, справа от меню Действия сайта. Этот элемент обозначается значком в виде папки со стрелкой вверх. При наведении на значок указателя мыши появляется всплывающая подсказка "Перейти вверх". По щелчку значка открывается всплывающее меню. В этом меню показывается текущее положение в иерархии сайтов. Если щелкнуть любую ссылку, предшествующую текущему положению, откроется соответствующее расположение с возможностью быстрого возврата к исходной точке.
На странице v4.master навигатор определяется с помощью следующей разметки:
Примечание |
---|
Для удобства чтения разметки выражения ресурсов ("$Resources:wss,resource_id") заменяются на локализованные строковые значения. |
<asp:contentplaceholder id="PlaceHolderGlobalNavigation" runat="server">
<SharePoint:PopoutMenu
runat="server"
ID="GlobalBreadCrumbNavPopout"
IconUrl="/_layouts/images/fgimg.png"
IconAlt="Navigate Up"
IconOffsetX=0
IconOffsetY=112
IconWidth=16
IconHeight=16
AnchorCss="s4-breadcrumb-anchor"
AnchorOpenCss="s4-breadcrumb-anchor-open"
MenuCss="s4-breadcrumb-menu">
<div class="s4-breadcrumb-top">
<asp:Label
runat="server"
CssClass="s4-breadcrumb-header"
Text="This page location is:" />
</div>
<asp:ContentPlaceHolder id="PlaceHolderTitleBreadcrumb" runat="server">
<SharePoint:ListSiteMapPath
runat="server"
SiteMapProviders="SPSiteMapProvider,SPContentMapProvider"
RenderCurrentNodeAsLink="false"
PathSeparator=""
CssClass="s4-breadcrumb"
NodeStyle-CssClass="s4-breadcrumbNode"
CurrentNodeStyle-CssClass="s4-breadcrumbCurrentNode"
RootNodeStyle-CssClass="s4-breadcrumbRootNode"
NodeImageOffsetX=0
NodeImageOffsetY=353
NodeImageWidth=16
NodeImageHeight=16
NodeImageUrl="/_layouts/images/fgimg.png"
RTLNodeImageOffsetX=0
RTLNodeImageOffsetY=376
RTLNodeImageWidth=16
RTLNodeImageHeight=16
RTLNodeImageUrl="/_layouts/images/fgimg.png"
HideInteriorRootNodes="true"
SkipLinkText="" />
</asp:ContentPlaceHolder>
</SharePoint:PopoutMenu>
<div class="s4-die">
<asp:ContentPlaceHolder id="PlaceHolderGlobalNavigationSiteMap" runat="server" Visible="false">
</asp:ContentPlaceHolder>
</div>
</asp:contentplaceholder>
Первое, на что необходимо обратить внимание, это то, что вся разметка навигатора находится внутри элемента управления ContentPlaceHolder (ID="PlaceHolderGlobalNavigation"). Это позволяет создать страницу контента и добавить элемент управления Content, переопределяющий контент по умолчанию, заданный на главной странице.
Большая часть разметки относится к определению всплывающего меню. Как можно увидеть из разметки, меню выводится с помощью элемента управления PopoutMenu. Этот элемент управления содержит элемент управления Label для заголовка меню и элемент управления ListSiteMapPath для гиперссылок, с помощью которых осуществляется навигации по веб-сайту. Элемент управления ListSiteMapPath вложен в другой элемент управления ContentPlaceholder (ID="PlaceHolderTitleBreadcrumb"), что позволяет переопределить его на странице контента.
Элемент управления ListSiteMapPath получает навигационные данные от двух поставщиков, SPSiteMapProvider и SPContentMapProvider. Первый предоставляет данные о веб-сайтах в иерархии сайтов, второй — данные о контенте сайтов, например о списках, библиотеках, папках и страницах. Оба поставщика являются производными от класса SiteMapProvider, который является источником данных карты сайта на стандартных сайтах ASP.NET.
Примечание |
---|
Поставщики навигации объявляются в разделе <system.web> файла web.config, который хранится в корневом каталоге веб-приложения по следующему пути: диск:\inetpub\wwwroot\wss\VirtualDirectories\ номер_порта\web.config. |
Верхняя панель ссылок
Верхняя панель ссылок представляет собой горизонтальную полосу со вкладками, расположенную непосредственно под заголовком и описанием сайта. Первая ссылка на верхней панели ссылок ведет на домашнюю страницу. Часто эта ссылка ведет на веб-сайт, где определена панель ссылок, а остальные ссылки ведут на сайты, расположенные на более низких уровнях иерархии. Однако такой стандарт не является обязательным. В качестве ссылки может использоваться любой действительный URL-адрес, а ссылки могут располагаться в любом порядке.
Дочерний сайт может наследовать верхнюю панель ссылок от родительского сайта. Наследование позволяет обеспечить единообразие навигации по нескольким сайтам. Дополнительные сведения см. в статье Совместное использование верхней панели ссылок разными сайтами.
На странице v4.master верхняя панель ссылок определяется с помощью следующей разметки:
<asp:ContentPlaceHolder id="PlaceHolderHorizontalNav" runat="server">
<SharePoint:AspMenu
ID="TopNavigationMenuV4"
Runat="server"
EnableViewState="false"
DataSourceID="topSiteMap"
AccessKey="1"
UseSimpleRendering="true"
UseSeparateCss="false"
Orientation="Horizontal"
StaticDisplayLevels="2"
MaximumDynamicDisplayLevels="1"
SkipLinkText=""
CssClass="s4-tn"/>
<SharePoint:DelegateControl
runat="server"
ControlId="TopNavigationDataSource"
Id="topNavigationDelegate">
<Template_Controls>
<asp:SiteMapDataSource
ShowStartingNode="False"
SiteMapProvider="SPNavigationProvider"
id="topSiteMap"
runat="server"
StartingNodeUrl="sid:1002"/>
</Template_Controls>
</SharePoint:DelegateControl>
</asp:ContentPlaceHolder>
Как и в случае навигатора, разметка, определяющая верхнюю панель ссылок, заключена в элемент управления ContentPlaceHolder, что позволяет разработчикам страниц контента переопределять контент по умолчанию.
Верхняя панель ссылок отображается с помощью элемента управления AspMenu. Меню выводится по горизонтали, в направлении, указанном в разметке для элемента управления путем присвоения свойству Orientation значения "Horizontal". Свойству StaticDisplayLevels присвоено значение 2. Как правило, это означает, что если у узла меню есть дочерний узел, он отображается на строку ниже родительского узла. Однако фактически дочерние узлы отображаются справа от родительских на одном уровне с ними. Это обусловлено классом каскадных таблиц стилей (CSS), связанным с меню путем с помощью свойства CssClass. Чтобы упростить управление пунктами меню с помощью CSS, в разметке для элемента управления свойству UseSimpleRendering присвоено значение "true".
Если в структуре меню больше двух уровней, элементы, расположенные на третьем уровне, отображаются во всплывающих меню — это регулируется свойством MaximumDynamicDisplayLevels. Поскольку этому свойству присвоено значение 1, всплывающие меню отображаются только на один уровень ниже двух уровней, отображаемых в статическом меню. Все остальные уровни пропускаются.
В качестве источника данных для меню используется элемент управления SiteMapDataSource. Как видно из разметки, свойство SiteMapProvider привязывает элемент управления источника данных к экземпляру класса SPNavigationProvider, который является производным от класса SiteMapProvider.
Также обратите внимание, что свойству ShowStartingNode присвоено значение False. Это обусловлено тем, что фактически начальным узлом является узел дерева узлов, формирующий верхнюю панель ссылок; он играет роль внутренней функции и не должен отображаться на странице. Значение свойства StartingNodeUrl, "sid:1002", не является действительным URL-адресом, а является выражением, указывающим на идентификатор SharePoint корневого узла верхней панели ссылок.
Для извлечения корневого узла воспользуйтесь следующей строкой кода:
SPNavigationNode toplinkbar = web.Navigation.GetNodeById(1002);
Dim toplinkbar as SPNavigationNode = web.Navigation.GetNodeById(1002)
Если рассмотреть этот объект, можно увидеть, что его свойство Title возвращает значение "SharePoint Top Navigation Bar" (верхняя панель навигации SharePoint), а свойство Url — значение "/".
Совет |
---|
Аналогичные результаты можно получить, открыв страницу v4.master и SharePoint Designer 2010 и изменив значение ShowStartingNode на True. Сохранив изменения и открыв в браузере домашнюю страницу веб-сайта, вы увидите, что в первом узле на верхней панели ссылок выводится текст SharePoint Top Navigation Bar. |
У объекта SPNavigationNode, представляющего корневой узел дерева верхней панели ссылок, есть свойство Children, возвращающее коллекцию объектов SPNavigationNode. Объекты в этой коллекции представляют видимые узлы на верхней панели ссылок. Коллекция является перечисляемой, что позволяет легко обойти ее содержимое в цикле, как показано в приведенном ниже коротком консольном приложении.
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("https://localhost"))
{
using (SPWeb web = site.OpenWeb())
{
SPNavigationNode toplinkbar = web.Navigation.GetNodeById(1002);
if (toplinkbar != null)
{
foreach (SPNavigationNode node in toplinkbar.Children)
{
Console.Write("| {0} ", node.Title);
}
Console.WriteLine("|");
}
}
}
Console.Write("\nPress ENTER to continue....");
Console.ReadLine();
}
}
}
Imports System
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Navigation
Module ConsoleApp
Sub Main()
Using site As New SPSite("https://localhost")
Using web As SPWeb = site.OpenWeb()
Dim toplinkbar As SPNavigationNode = web.Navigation.GetNodeById(1002)
If toplinkbar IsNot Nothing Then
For Each node As SPNavigationNode In toplinkbar.Children
Console.Write("| {0} ", node.Title)
Next
Console.WriteLine("|")
End If
End Using
End Using
Console.Write(vbCrLf & "Press ENTER to continue....")
Console.Read()
End Sub
End Module
Панель быстрого запуска
Панель быстрого запуска — это меню ссылок, отображаемое в левой части страниц сайта. Это меню предназначено для навигации по сайту и обычно содержит ссылки на списки, библиотеки документов и иной контент сайта. Меню также может содержать ссылки на внешний контент.
Владельцы сайтов могут включить или скрыть Панель быстрого запуска в пользовательском интерфейсе администрирования в меню Действия сайта. Разработчики могут сделать то же самое с помощью кода. Дополнительные сведения см. в статье Практическое руководство. Отображение и скрытие меню быстрого запуска.
На странице v4.master разметка, определяющая Панель быстрого запуска, вложена в элемент управления ContentPlaceHolder (ID="PlaceHolderLeftNavBar"), который также содержит разметку для элемента управления иерархического представления. Это позволяет разработчикам страниц заменить оба элемента навигации на собственный контент. Страницы контента, связанные со встроенными веб-шаблонами, подставляют другой контент. В качестве примера можно привести шаблон рабочей области для собраний.
В разметке для Панели быстрого запуска определяются две версии, каждая из которых находится внутри элемента управления UIVersionedContent. Для одного элемента управления UIVersionedContent атрибуту UIVersion присвоено значение 3, для другого — 4. Какая из версий будет отображаться на странице, зависит от того, применили ли администраторы семейства веб-сайтов к сайтам семейства новый пользовательский интерфейс. Дополнительные сведения см. в статье Визуальное обновление.
Примечание |
---|
Номер версии пользовательского интерфейса можно получить программным путем, обратившись к свойству SPWeb.UIVersion. |
Версия 4 панели быстрого запуска определяется следующей разметкой:
<SharePoint:AspMenu
id="V4QuickLaunchMenu"
runat="server"
EnableViewState="false"
DataSourceId="QuickLaunchSiteMap"
UseSimpleRendering="true"
UseSeparateCss="false"
Orientation="Vertical"
StaticDisplayLevels="2"
MaximumDynamicDisplayLevels="0"
SkipLinkText=""
CssClass="s4-ql" />
Панель быстрого запуска отображается в виде последовательности заголовков, которые могут иметь один или несколько уровней меню. Количество уровней меню, фактически отображаемых на странице, зависит от настройки элемента управления AspMenu, с помощью которого выводится меню.
В предыдущем примере свойству StaticDisplayLevels было присвоено значение "2", что соответствовало двум уровням меню: заголовку и уровню меню под заголовком. Дополнительные уровни меню могут отображаться с помощью динамических всплывающих меню. Количество уровней, отображаемых во всплывающих меню, определяется значением свойства MaximumDynamicDisplayLevels. В данном случае этому свойству присвоено значение 0, т. е. всплывающие меню отключены. Таким образом, если Панель быстрого запуска имеет более двух уровней меню, дополнительные уровни не отображаются.
Свойство DataSourceID в разметке для элемента управления AspMenu указывает на элемент управления SiteMapDataSource, настроенный с помощью следующей разметки:
<asp:SiteMapDataSource
SiteMapProvider="SPNavigationProvider"
ShowStartingNode="False"
id="QuickLaunchSiteMap"
StartingNodeUrl="sid:1025"
runat="server" />
Как и в случае с источником данных для верхней панели ссылок, свойству ShowStartingNode источника данных для Панели быстрого запуска присвоено значение False. Корневой узел содержит сведения о самой Панели быстрого запуска и не предназначен для отображения. Все остальные узлы (ссылки) являются его дочерними узлами. Значение свойства StartingNodeUrl, "sid:10252", представляет собой идентификатор SharePoint для корневого узла панели быстрого запуска.
Для извлечения корневого узла воспользуйтесь следующей строкой кода:
SPNavigationNode quicklaunch = web.Navigation.GetNodeById(1025);
Dim quicklaunch as SPNavigationNode = web.Navigation.GetNodeById(1025)
Если рассмотреть этот объект, можно увидеть, что его свойство Title возвращает значение "Quick launch" (панель быстрого запуска), а свойство Url — значение "/".
У объекта SPNavigationNode в корне дерева узлов есть свойство Children, возвращающее коллекцию объектов SPNavigationNode, представляющих первый уровень меню, а именно заголовки. У каждого заголовка могут быть дочерние узлы, представляющий второй уровень меню. У узлов второго уровня также могут быть дочерние узлы и т. д.
В приведенном ниже консольном приложении показано, как обойти меню Панель быстрого запуска, перечисляя элементы. Приложение печатает текст каждого заголовка на панели быстрого запуска, а затем вызывает рекурсивный метод для печати текста всех пунктов меню под каждым заголовком.
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("https://localhost"))
{
using (SPWeb web = site.OpenWeb())
{
SPNavigationNode quicklaunch = web.Navigation.GetNodeById(1025);
if (quicklaunch != null)
{
foreach (SPNavigationNode heading in quicklaunch.Children)
{
PrintNode(heading);
Console.WriteLine(new String('-', 10));
}
}
}
}
Console.Write("\nPress ENTER to continue....");
Console.ReadLine();
}
static void PrintNode(SPNavigationNode node)
{
Console.WriteLine(node.Title);
foreach (SPNavigationNode item in node.Children)
PrintNode(item);
}
}
}
Imports System
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Navigation
Module ConsoleApp
Sub Main()
Using site As New SPSite("https://localhost")
Using web As SPWeb = site.OpenWeb()
Dim quicklaunch As SPNavigationNode = web.Navigation.GetNodeById(1025)
If quicklaunch IsNot Nothing Then
For Each heading As SPNavigationNode In quicklaunch.Children
PrintNode(heading)
Console.WriteLine(New String("-", 10))
Next
End If
End Using
End Using
Console.Write(vbCrLf & "Press ENTER to continue....")
Console.Read()
End Sub
Sub PrintNode(ByRef node As SPNavigationNode)
Console.WriteLine(node.Title)
For Each item As SPNavigationNode In node.Children
PrintNode(item)
Next
End Sub
End Module
Иерархическое представление
Этот элемент навигации предназначен для иерархического представления всего контента сайта. По умолчанию иерархическое представление отключено. Если оно включено, оно отображается на странице в левой области навигации. Если Панель быстрого запуска включена, иерархическое представление отображается под ней.
Администратор веб-сайта может включить иерархическое представление на странице Tree View пользовательского интерфейса администрирования. Чтобы перейти на страницу Иерархическое представление, выберите в меню Действия сайта пункт Параметры сайта. В разделе Внешний вид и функции выберите пункт Иерархическое представление.
Чтобы включить иерархическое представление в коде, присвойте свойству SPWeb.TreeViewEnabled значение true.
Как и Панель быстрого запуска иерархическое представление имеет две версии. В v4.master обе версии отображаются с помощью элемента управления SPTreeView, вложенного в элемент управления SPRememberScroll. Элемент управления SPTreeView получает данные от экземпляра класса SPHierarchyDataSourceControl.
На странице v4.master версия 4 определяется с помощью следующей разметки:
<SharePoint:DelegateControl runat="server" ControlId="TreeViewAndDataSource">
<Template_Controls>
<SharePoint:SPHierarchyDataSourceControl
runat="server"
id="TreeViewDataSourceV4"
RootContextObject="Web"
IncludeDiscussionFolders="true" />
<SharePoint:SPRememberScroll
runat="server"
id="TreeViewRememberScrollV4"
onscroll="javascript:_spRecordScrollPositions(this);"
style="overflow: auto;height: 400px;width: 155px; ">
<SharePoint:SPTreeView
id="WebTreeViewV4"
runat="server"
ShowLines="false"
DataSourceId="TreeViewDataSourceV4"
ExpandDepth="0"
SelectedNodeStyle-CssClass="ms-tvselected"
NodeStyle-CssClass="ms-navitem"
SkipLinkText=""
NodeIndent="12"
ExpandImageUrl="/_layouts/images/tvclosed.png"
ExpandImageUrlRtl="/_layouts/images/tvclosedrtl.png"
CollapseImageUrl="/_layouts/images/tvopen.png"
CollapseImageUrlRtl="/_layouts/images/tvopenrtl.png"
NoExpandImageUrl="/_layouts/images/tvblank.gif">
</SharePoint:SPTreeView>
</SharePoint:SPRememberScroll>
</Template_Controls>
</SharePoint:DelegateControl>
Обратите внимание, что в качестве источника данных для иерархического представления используется объект SPHierarchyDataSourceControl, свойству RootContextObject которого присвоено значение "Web". Это значение задает контекст корневого элемента иерархии. В результате в иерархическом представлении отображаются ссылки на все дочерние сайты текущего сайта, а под ними — библиотеки документов и списки.
См. также
Задачи
Настройка отображение меню быстрого запуска
Концепции
Совместное использование верхней панели ссылок разными сайтами
Практическое руководство. Настройка отображения верхней панели ссылок
Использование пользовательского источника данных для навигации