среда, 25 мая 2011 г.

Sharepoint: Модификация мастер-страниц.

Описание проблемы.
Есть решение, содержащее шаблон узла и фичу, публикующую мастер-страницы. Определение фичи:
<Module Name="MasterPages" Url="_catalogs/masterpage" Path="MasterPages" RootWebOnly="TRUE">
  <File...

Для каких-то потребностей создается веб-приложение. В этом веб-приложении создается семейство сайтов с использование разработанного шаблона узла. На созданном сайте активируется наша фича, которая успешно размещает мастер-страницы в библиотеке мастер-страниц.
Допустим создали два веб-приложения. Мастер-страницы в библиотеке не меняем. Обновляем наше решение (в мастер-странице добавили некий элемент, фичу не переактивируем), используя stsadm -o upgradesolution. Что мы увидим?



Ответ: на созданных сайтах мы увидим, что внешний вид страницы изменился согласно мастер-страницы определенной в фичи. Т.е. если мы изменим мастер-страницу, располагающуюся на диске в папке Features, то эти изменения будут видны на самом портале.
При этом, если зайти Sharepoint Designer на портал и открыть мастер-страницу на редактирование, то мы не увидим изменений, которые внесли на диске. Если мы отредактируем и опубликуем мастер-страницу в библиотеке, то на портале увидим изменения согласно файлу в библиотеке.
Если же мы выполним возврат мастер-страницы к определению узла, то опять отображение будет соответствовать мастер-странице, располагающейся на диске.

Этот факт вызвал у меня противоречие. Подобное поведение я наблюдал в Sharepoint 2003 с обычными страницами. Но тогда, если мне не изменяет память, в Дизайнере я видел то же содержимое, что и в файле на диске, то того момента пока я не опубликую изменения.
Мне казалось, что раз создается отдельно библиотека мастер-страниц и мы туда кладем мастер-страницу, то она и используется в отображении портала. Оказывается не так. Если создать сайт, то его мастер-страницы зависят от мастер-страниц, располагающихся на диске. После того как мы меняем мастер-страницу через Дизайнер, мастер-страница становится отвязанной от файла на диске и имеет свою копию в БД. Если мы в Дизайнере говорим, что надо вернуть определение мастер-страницы, то мы опять привязываем её к файлу на диске.

С одной стороны хорошо, т.к. одновременно меняется поведение на всех веб-приложениях. Это же является минусом. Выход один: если мы хотим иметь мастер-страницу отличную от той, что есть на диске, необходимо её модифицировать и опубликовать в Дизайнере. Вот так.

ЗЫ Для меня остался вопрос для чего же тогда используются неизменные мастер-страницы в библиотеке мастер-страниц. Наверное, чтобы можно было их менять :)
ЗЫЫ Еще странность: если неизменные мастер-страницы ссылаются на файл на диске, то почему, если файл на диске модифицировать, то его изменения не видны в Дизайнере?

Вот такой загадочный Sharepoint.

Обновление (30 мая 2011г):
Как показал поиск, в Sharepoint 2010 так же есть понятие Re-Ghosting Pages. Ghosting Page - эта связь с файлом на диске. UnGhosting- это создание копии файла с диска в БД контента соответствующего веб-приложения.
В Sharepoint 2010 этот механизм работает как надо, т.е. для Ghosting Page в Sharepoint Designer видно содержимое с диска. Похоже что в Sharepoint 2007 у меня наблюдался какой-то глюк.
Напоследок две интересные ссылки:

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

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

Еще статьи

2leep.com