пятница, 1 июля 2011 г.

Sharepoint 2010: Работа с Вариантами (Variations)

Спасибо IAfanasov за решение вопроса.
Рано или поздно при разработке сайтов с помощью Sharepoint возникает необходимость предоставить разные варианты отображения одного и того же сайта. И это без разницы доступен ли сайт через интернет или им пользуются только в интрасети.
Сценарии, при которых может потребоваться использование вариантов, могут быть следующие:
  • Несколько языков. В этом сценарии большая часть контента создается на языке исходного варианта веб-сайта и копируется в некоторые или во все конечные варианты веб-сайта для перевода на различные языки. Например, контент может быть создан на английском языке и скопирован в конечные варианты веб-сайтов для перевода на немецкий, французский и испанский языки
  • Несколько устройств. Логику работы страницы VariationRoot.aspx можно настроить так, чтобы перенаправить пользователей на страницы, предназначенные для работы с различными типами устройств. Например, можно использовать конечные варианты веб-сайта со страницами, предназначенными для показа на устройствах с различными размерами экранов или различным разрешением экранов.
  • Несколько расположений или фирменных стилей. Например, организация, предоставляющая автомобили в аренду, может использовать конечные варианты веб-сайтов для всех городов, в которых у этой компании есть филиалы. Большая часть сведений о компании одинакова для всех филиалов, поэтому для этих страниц используются варианты, а остальной контент, например специальные предложения или мероприятия по продвижению услуг, создается на конечных вариантах веб-сайта, для которых он предназначен.
Очень хорошая статья, которая дала мне ответы на многие мои вопросы доступна здесь (перевод). Так же будет полезным чтение статьи Планирование вариантов, Планирование многоязычных сайтов и Plan for multilingual sites. Пересказывать свои словами содержание этих статей я не буду, т.к. там всё очень подробно расписано. Но остановлюсь на тех моментах, которые там не описаны и могут быть полезны при использовании вариантов. Исходная ситуация. Имеется уже созданная структура портала. Необходимо внедрить многоязычность. Для примера я использовал шаблон "Веб-сайт публикации" при создании семейства узла. Но всё описанное ниже работает и с custom шаблоном узла публикации.
Структура следующая:
Проблемы, которые надо решить:
  1. Создать варианты текущего сайта. Первое ограничение - это то, что варианты одноуровневые, т.е. они находятся на одном уровне иерархии. Т.о. отпадает требование, чтобы исходный вариант - это была существующая структура сайта. Т.е. нам необходимо будет создать варианты, выбрав предварительно какой из них будет исходным (после создания иерархии сайтов вариантов этот выбор нельзя будет сменить).
  2. После создания вариантов нам надо наполнить структуру исходного варианта. С нуля ручками делать всё лень, да и не правильно. Поэтому как вариант можно воспользоваться инструментом "Контент и структура сайта" из меню "Действия сайта". Если там этого пункта нет, то можно просто использовать относительный путь /_layouts/sitemanager.aspx.
Создание вариантов сайтов. Зайдем в "Параметры сайта" и в "Администрирование семейства сайтов" выберем пункт "Варианты"
Там мы установим настройки синхронизации вариантов (подробно об каждой настройке описано в статьях, упомянутых выше) и укажем начальное расположение, в котором будут создаваться варианты нашего сайта. Я выбрал сайт верхнего уровня. Затем идем в метки вариантов и создаем необходимые метки. Напомню, что я создаю многоязычный сайт, поэтому я предварительно установил нужные мне LanguagePacks (русский и английский), и установил соответствующие языки в ОС сервера. Я создал следующие метки
После создания всех нужных меток, еще раз убедитесь в правильности настройки (какая метка будет у вас исходной, какой шаблон сайта выбран для вариантов, правильно ли установлены параметры синхронизации и тд). Если всё хорошо, то жмем кнопку "Создать иерархии". В статье описаны параметры заданий таймеров синхронизации. По умолчанию, иерархия сайтов создается ночью между 0ч и 3ч. Можно ждать это время, но можно пойти в центр администрирования и поменять расписание таймера (или запустить таймер на выполнение). Что я и сделал для тестирования. Зайдя в "Журналы вариантов" можно увидеть следующее
Видно, что создались два узла "Русский" и "en-SU" (почему не English?). Также можно видеть ход создания иерархии вариантов. Справа можно было увидеть ошибки, которые были во время создания иерархии. У меня их пока не было. Давайте проверим как работает синхронизация вариантов. Для этого на сайте "Русский" создадим тестовый узел по шаблону "Сайт публикации с рабочим процессом". Я назову его Test.
Когда таймер синхронизации сработает, то аналогичный сайт появится в английской версии сайта
Имеем
 
Как видно, некоторые части интерфейса переведены. Далее уже вступают в силу настройки синхронизации. Если мы изменим страницу, переведя все на английский язык, то если стоит синхронизировать страницы, то наши изменения пропадут. В общем, необходимо продумать как будут работать варианты. Идём дальше. К сожалению, варианты не всесильны. Они не синхронизируют списки, настройки полей, состояние фич и тд. Они всего лишь распространяют веб-сайты публикации и страницы публикации. Больше ничего :-( Т.о. остальная синхронизация ложится на плечи администратора сайта. Если создать страницу, изменить и опубликовать её, затем запросить её обновление в Вариантах
и извлечь (ну бывает такая ситуация, когда страница извлечена, а идёт синхронизация), то в журнале синхронизации мы можем наблюдать следующее:
Как видно, мы получили ошибку. Т.к. такого рода ошибки встречаются часто, то поэтому я и воспроизвел их. Устраняется такая ошибка просто: возвращается страница и задается задание на её распространение с помощью кнопки Обновить. Теперь нам надо существующую содержание сайта перенести на исходный вариант. Для этой цели можно использовать как инструмент "Контент и структура сайта" так и stsadm или PowerShell. Я выберу первое, т.к. мне надо перенести пару сайтов. Для эксперимента, я на одном из сайтов оставлю страницу извлеченной. Перенес сайты "Сайт 1" и "Сайт 2" (созданы по шаблонам веб-сайтов публикации, по другим шаблонам синхронизация вариантов почему-то не идёт). Как видно структура полностью перенеслась.
При следующем запуске таймера вариант сайта "Русский" должен распространится на "English".
Отображение контрола выбора варианта.
Изначально после создания вариантов контрол выбора варианта не отображается на странице. Для навигации по вариантом можно использовать обычное меню. Но это не всегда удобно.
Чтобы контрол стал виден, необходимо проделать некоторые действия.
Сам контрол отображения выбора варианта реализован в файле VariationsLabelMenu.ascx, который располагается в папке %ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\CONTROLTEMPLATES. Изначально этот файл “пустой”, т.е. нет элемента, отвечающего за отображение выбора варианта:
12
Поиск по интернету навел на статью, в которой говорится, что надо добавить в этот файл строчку
<cms:VariationsLabelEcbMenu id ="varlabelmenu1" DataSourceID="LabelMenuDataSource" 
DisplayText="Links to Variations" IsCallbackMode="true" runat="server" />
13 Правда, в той же статье в комментариях указано, что этот контрол является устаревшим, но не говорят чем был заменен. Поэтому оставим как есть. После изменения файла описания контрола его можно увидеть на странице. 14 Заметьте, что мастер-страницу менять не пришлось. Данный контрол отображается в элементе
<SharePoint:DelegateControl runat="server" ControlId="GlobalSiteLink0"/>
который определен на мастер-странице. Правда иногда после внедрения этого контрола на страницу, происходит сбой отображения Ленты. Вот скриншот с другого сайта:
15
Эта проблема решается способом, описанным в следующей статье. Если коротко, то существующий контрол скрывается на странице и добавляется новая ссылка на контрол. Правда тут уже надо модифицировать мастер-страницу.

Свои шаблоны узлов для вариантов.
Как говорилось выше, автоматическая синхронизация работает только с сайтами публикации. Поэтому когда разрабатываете свой шаблон узла это надо учитывать. При синхронизации может появиться ошибка: "Сбой задания распространения вариантов сайтов для исходного сайта http://sp2010/Русский/site со следующим сообщением об ошибке: Для шаблона сайта "NSO#1" указаны недопустимые аргументы или файл. Parameter name: WebTemplate."
Поиск привел меня к следующим решениям (первое и второе). Понятное дело, что все LanguagePacks у меня установлены, поэтому эти решения мне не подошли. А дело оказалось еще проще. Как известно описания шаблонов узлов хранятся в папке %ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\[language]\XML
Так что надо просто не забыть разместить свой файл webtemp_[наше название].xml в соответствующей языковой папке.

Ссылки:

Комментариев нет:

Отправить комментарий

Еще статьи

2leep.com