Решения навигации для порталов SharePoint Online
В каждом проекте портала необходимо реализовать решение навигации. В зависимости от требований проекта решение навигации может использовать только готовые компоненты навигации, только настраиваемые компоненты навигации или сочетание обоих вариантов.
В этой статье описано, как создать отличную систему навигации в SharePoint Online.
Примечание.
Хотя эти инструкции в основном предназначены для SharePoint Online, большая часть из них также применима к порталам, размещенным в локальной среде SharePoint.
Что не стоит делать
В следующем списке содержатся основные действия, которые не следует выполнять при разработке решения навигации.
Не рекомендуется:
- Использовать готовую структурную навигацию сайта, если семейства веб-сайтов портала имеют сложную структуру (несколько уровней сайтов и (или) уникальные разрешения).
- Использовать настраиваемое решение навигации, которое запрашивает все узлы навигации для всех настраиваемых элементов управления навигацией сразу после загрузки страницы, даже для элементов управления, которые изначально свернуты или скрыты.
- Использовать настраиваемое решение навигации, которое не кэширует получаемые узлы навигации.
- Использовать настраиваемое решение навигации, ориентированное на устаревшую веб-службу списков (SOAP). Чтобы не создавать дополнительные проблемы не передавайте ему плохо сформированные запросы CAML.
- Получать банк терминов, ссылаясь на него по имени или ИД (например,
var termStores = taxSession.get_termStores();var termStore = termStores.getByName("Taxonomy_Dmxzz8tIBzk8wNVKQpJ+xA==");
). Рекомендуется получить ключевое слово по умолчанию или банк терминов семейства веб-сайтов (например,var termStore = taxSession.getDefaultSiteCollectionTermStore();
илиvar termStore = taxSession.DefaultKeywordsTermStore()
).
Обоснование для применения настраиваемого решения навигации
Существует множество причин, по которым архитектор портала может выбрать использование настраиваемого решения навигации. Большинство причин связано с тем, что современные макеты порталов являются адаптивными по своей сути и обычно включают в себя систему навигации с обширными функциями. Поэтому попытки сопоставить предложенный макет с SharePoint в конечном итоге завершится сбоем, так как невозможно настроить готовые серверные элементы управления навигацией в соответствии с одним или несколькими требованиями предложенного макета. Конкретные примеры представлены ниже.
Готовые элементы управления:
- Соответствующий пользовательский интерфейс управления не поддерживает адаптивный дизайн пользовательского интерфейса.
- Не демонстрируют требуемого поведения (например, всплывающие окна при наведении курсора, мегаменю, мультимедиа, отложенная загрузка).
- Не поддерживают нужные атрибуты иерархии навигации (например, заголовки, группировку, глубину, ограничение ссылок).
- Не поддерживают нужные атрибуты ссылок навигации (например, эскиз, ссылка на изображение, начало/конец публикации, выделение).
- Недоступны или перестали быть доступными (например, нижний колонтитул, строка навигации).
- Не интегрируются с настраиваемыми и устаревшими хранилищами данных навигации.
- Пользовательский интерфейс управления несогласован в разных элементах управления навигации и неудобен для пользователя.
При накоплении достаточного количества причин рассмотрите настраиваемое решение навигации.
Использование готового решения навигации
Вы проанализировали обоснование настраиваемого решения навигации и решили, что ни одна из этих причин неприменима. Хорошая новость заключается в том, что вы можете использовать проверенные шаблоны готового решения навигации.
По своей сути решение навигации состоит из набора элементов управления навигацией, которые получают свои данные из хранилища навигации. При выборе готового решения навигации предпочтительным вариантом хранилища навигации является управляемая навигация (описана далее в этой статье), так как она обеспечивает улучшенную производительность загрузки страницы.
Другой вариант — готовая структурная навигация (описана далее в этой статье), которая может легко стать очень ресурсоемкой (особенно для сложных структур семейств веб-сайтов) и привести к значительному замедлению загрузки страниц.
Использование настраиваемого решения навигации
Вы проанализировали обоснование настраиваемого решения навигации и решили, что к вам применимо достаточное количество этих причин. Хорошая новость заключается в том, что вы можете использовать проверенные шаблоны для разработки настраиваемого решения навигации.
На следующей схеме показана логическая архитектура настраиваемого решения навигации.
В следующих разделах описываются основные компоненты логической архитектуры.
Элемент управления отображением навигации
Это настраиваемый клиентский элемент управления отображением JavaScript, который находится на странице.
Как правило, элемент управления запрашивает хранилище навигации при загрузке страницы, обрабатывает отклик данных навигации и отрисовывает компонент навигации (представление, сведения и поведение). На практике элемент управления должен соблюдать шаблон отложенной загрузки: выполнять запрос данных навигации только при необходимости и откладывать его как можно дольше.
Элемент управления отображением можно добавить в статическое определение страницы во время разработки (с помощью эталонной страницы, макета страницы или веб-части) или добавить в динамическое состояние страницы во время выполнения (с помощью метода встраивания JavaScript).
Для оптимизации производительности страницы элемент управления отображением использует уровень доступа к клиентским данным (описано далее в этой статье).
При желании элемент управления отображением может предоставлять ссылку на параметры страницы управления навигацией, которая демонстрирует пользовательский интерфейс для изменения конфигурации элемента управления навигацией.
Ниже приводится общее руководство по различным типам элементов управления навигацией, которые обычно используются в настраиваемом решении навигации.
Типовые элементы управления отображением навигации
- Глобальная структура навигации. Реализуйте настраиваемый элемент управления, который нацелен на центральный объект конфигурации навигации для портала. Используйте общедоступный кэш для узлов навигации. Рассмотрите возможность использования готовой страницы управления.
- Нижний колонтитул с элементами навигации. Реализуйте настраиваемый элемент управления, который нацелен на центральный объект конфигурации навигации для портала. Используйте общедоступный кэш для узлов навигации. Рассмотрите возможность использования готовой страницы управления.
- Карта сайта. Реализуйте настраиваемый элемент управления, который нацелен на центральный объект конфигурации навигации для портала.
- Текущая структура навигации (то есть в левой области). Реализуйте настраиваемый элемент управления, который нацелен на локальный объект конфигурации навигации для веб-сайта. Используйте общедоступный кэш для узлов навигации. Рассмотрите возможность использования готовой страницы управления.
- Строка навигации. Избегайте реализации этого настраиваемого элемента управления. Создание родительской цепочки веб-объектов на основе URL-адреса текущего веб-сайта является затратной операцией.
- Полезные ссылки. Реализуйте настраиваемый элемент управления, который нацелен на локальный объект конфигурации навигации для веб-сайта. Используйте общедоступный кэш для узлов навигации. Рассмотрите возможность использования готовой страницы управления.
- Мои ссылки. Реализуйте настраиваемый элемент управления, который нацелен на личный объект конфигурации навигации для пользователя. Используйте личный кэш для узлов навигации. Предоставьте настраиваемую страницу управления.
Хранилище навигации
Хранилище навигации сохраняет конфигурацию настраиваемого элемента управления навигацией. Вы можете указать, чтобы настраиваемый элемент управления навигацией использовал либо настраиваемое хранилище навигации, либо готовое хранилище навигации.
Настраиваемое хранилище навигации
Наиболее часто используемое настраиваемое хранилище навигации (настраиваемый список SharePoint) обеспечивает баланс между расширяемостью, управляемостью и производительностью (при запросе с помощью поиска). Схему списка можно легко расширить с помощью настраиваемых типов контента, которые представляют заголовки/группы структуры навигации и ссылки навигации, а также столбцы сайта, которые определяют нужные настраиваемые атрибуты (например, порядок отображения). Свойства для обхода для этих столбцов сайта можно сопоставить с управляемыми свойствами в поиске SharePoint. Управление данными навигации легко осуществляется с помощью знакомых готовых страниц управления списками. Доступ к данным навигации можно получить удаленно с помощью REST API поиска SharePoint.
Примечание.
Навигация на основе поиска зависит от индекса поиска. SharePoint непрерывно обходит содержимое портала. Однако прежде чем изменения списка SharePoint отобразятся в индексе поиска, по-прежнему наблюдается небольшая задержка.
Самым простым и оптимальным настраиваемым хранилищем навигации является файл ресурсов JavaScript (например, nav.js), который объявляет переменную конфигурации для определенного компонента (например, footerNav), инициализированную с помощью строки JSON. Браузер автоматически скачивает файл и кэширует его для последующего использования. Данные конфигурации готовы к использованию после их загрузки в среду выполнения JavaScript. Основной компромисс этого подхода относится к пользовательскому интерфейсу управления: как минимум, администратор должен вручную изменить строку JSON в файле JavaScript. Чтобы абстрагировать хранилище от администратора и сделать действия более понятными, потребуется настраиваемый пользовательский интерфейс.
На другом конце спектра настраиваемых хранилищ навигации находится пользовательская база данных. Этот вариант обеспечивает максимальную гибкость, но также требует наибольшей настройки при разработке. Кроме того, для базы данных требуется среда внешнего размещения, настраиваемый веб-API и страница управления навигацией.
Примечание.
Отличный пример реализации настраиваемого хранилища навигации, в котором используется уровень доступа к клиентским данным представлен в разделе Пример уровня доступа к клиентским данным (DAL) в репозитории SharePoint PnP.
Готовое хранилище навигации
Готовая управляемая навигация (MMS). Управляемая навигация позволяет использовать набор терминов службы управляемых метаданных (MMS) для настройки узлов навигации на определенном семействе веб-сайтов. Готовые элементы управления отображением навигации автоматически используют эти данные. На готовой странице управления навигацией предусмотрен удобный пользовательский интерфейс для управления узлами навигации в неограниченной иерархии (неограниченная глубина). Настраиваемые элементы управления отображением навигации также могут использовать эти данные, но должны делать это с помощью JSOM, так как в настоящее время нет REST API, доступного для работы с управляемой навигацией.
Примечание.
Довольно сложно настроить и поддерживать определение глобальной структуры навигации с помощью управляемой навигации. При создании каждого семейства веб-сайтов необходимо дублировать конфигурацию для этого семейства веб-сайтов и связанный с ним набор терминов. Также учитывайте, что управляемая навигация не фильтруется по ролям безопасности, поэтому ваши пользователи могут видеть ссылки, к которым у них нет доступа.
Готовая структурная навигация (сайт). Структурная навигация позволяет использовать собственную структуру семейства веб-сайтов (веб-сайты и страницы), а также созданные заголовки и ссылки для настройки узлов навигации определенного семейства веб-сайтов. На готовой странице управления навигацией предусмотрен пользовательский интерфейс для управления узлами навигации в ограниченной иерархии (ограниченная глубина). Настраиваемые элементы управления отображением навигации также могут использовать эти данные, но должны делать это с помощью JSOM, так как в настоящее время нет REST API, доступного для работы со структурной навигацией.
Примечание.
Готовые элементы управления отображением навигации используют запросы базы данных (то есть контент по запросу), чтобы получать данные навигации. Они выполняют это при каждой загрузке страницы, что очень ресурсоемко для сложных структур семейств веб-сайтов. Структурную навигацию рекомендуется использовать только для небольших порталов с простыми структурами семейств веб-сайтов. Структурная навигация всегда возвращает результаты, отфильтрованные по ролям безопасности.
Готовый индекс поиска (поиск). Навигация на основе поиска позволяет запрашивать индекс поиска SharePoint для сайтов и страниц путем создания соответствующего поискового запроса. Специальная готовая страница управления навигацией отсутствует, и вам необходимо реализовать настраиваемые элементы управления отображением навигации, чтобы использовать данные, полученные из поисковых запросов.
Примечание.
При использовании навигации на основе поиска важно кэшировать полученные результаты поиска, чтобы не обращаться к серверу при каждой загрузке страницы. Далее в этой статье объясняется уровень доступа к клиентским данным, который является моделью, используемой в сочетании с навигацией на основе поиска. Как и структурная навигация, навигация на основе поиска фильтруется по ролям безопасности, поэтому ваши пользователи не увидят недоступные ссылки. Недостаток навигации на основе поиска заключается в том, что сложно управлять порядком возвращаемых элементов навигации.
Страница управления навигацией
Страница управления навигацией предоставляет пользовательский интерфейс для изменения конфигурации элемента управления навигацией удобным способом. Доступ к странице можно получить напрямую, а также по дополнительной ссылке, доступной в элементе управления навигацией (например, по ссылке "Параметры"). Чтобы изменять конфигурацию элемента управления навигацией, страница использует соответствующие API хранилища навигации для выбранного хранилища навигации.
Вы можете указать, чтобы настраиваемый элемент управления навигацией использовал либо настраиваемую страницу управления навигацией, либо готовую страницу управления навигацией.
Во многих случаях достаточно стандартной готовой страницы управления навигацией (например, представления списка SharePoint или страницы управления набором терминов), связанной с выбранным хранилищем навигации. Если стандартная страница недоступна, необходимо разработать настраиваемую страницу. При принятии решения о допустимости существующей стандартной страницы учитывайте общие затраты на разработку настраиваемой страницы управления (проектирование, разработка, обслуживание, размещение и обучение пользователей).
Согласно проверенному правилу настраиваемые страницы управления следует применять только в том случае, если стандартный вариант не существует, когда страница должна поддерживать адаптивный пользовательский интерфейс или когда страница предназначена для применения через интерфейсное представление пользователя портала (в отличие от серверного представления администратора).
API хранилища навигации
API хранилища навигации предоставляет программный интерфейс для согласованного и безопасного изменения конфигурации элемента управления навигацией. Вы можете указать, чтобы настраиваемый элемент управления навигацией использовал либо API настраиваемого хранилища навигации, либо API готового хранилища навигации.
Если вы хотите разработать и развернуть API настраиваемого хранилища навигации, соблюдайте следующие рекомендации.
- Выполняйте реализацию с помощью предпочитаемого стека технологий (ASP.NET Web API 2.0, Node.js и т. д.).
- Размещайте API в среде, доступной через Интернет.
- Используйте общедоступный DNS для разрешения имен.
- Требуйте SSL и получите SSL-сертификат от общедоступного центра сертификации.
- Включите анонимный доступ и защитите API с помощью Azure AD.
- Реализуйте поддержку CORS (Cross-Origin Resource Support).
Для клиентских сред .NET:
- Нацеливайтесь на API SharePoint с помощью клиентской объектной модели SharePoint (CSOM или REST).
- Нацеливайтесь на пользовательские веб-API посредством REST.
- Нацеливайтесь на сторонние API посредством REST (или SOAP при необходимости).
Для браузерных клиентских сред:
- Нацеливайтесь на API SharePoint посредством REST API SharePoint (используйте JSOM только при необходимости).
- Используйте междоменную библиотеку, если вы нацеливаетесь на другое семейство веб-сайтов.
- Нацеливайтесь на пользовательские веб-API посредством REST.
- Используйте библиотеку проверки подлинности Майкрософт для JavaScript и неявного потока OAuth.
- Нацеливайтесь на сторонние API посредством REST (или SOAP при необходимости).
Уровень доступа к клиентским данным
Уровень доступа к клиентским данным — это настраиваемая клиентская платформа JavaScript, доступная для всех настраиваемых клиентских элементов управления отображением, включая настраиваемые элементы управления отображением навигации. Она поддерживает шаблоны загрузки интеллектуальных данных, абстрагирует детали запросов от клиента к серверу, предоставляет функции кэширования данных для минимизации трафика запросов от клиента к серверу и улучшает воспринимаемую производительность страницы.
Дополнительные сведения о клиентском уровне доступа к данным см. в статье Руководство по оптимизации производительности для порталов SharePoint Online.