Как заменить application.master на собственный на всем портале SharePoint
Суть проблемы заключается в том, что если применить измененный application.master “мышкой” из Web интерфейса SharePoint, то останется довольно большое количество страниц (вся страницы, лежащие в папке LAYOUTS) к которым измененный master page не будет применяться.
Обойти такую проблему можно следующим образом:
1. Скопировать application.master и внести в него необходимые изменения. При этом нельзя удалять со страницы ни одного contentplaceholder'а.
Стандартный application.master, использующийся на портале по умолчанию находится на системном диске в папке \Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS.
2. Создать фичу, которая будет инсталлировать masterpage на портал в Master Page Gallary. Как это делается читать здесь.
3. Разработать HttpHandler
Открываем Visual Studio 2005. Создаем там проект и класс, следующего содержания:
namespace Samples.Modules
{
/// <summary>
/// Модуль для переопределения master.page для системных страниц
/// </summary>
public class MasterPageModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
Page page = HttpContext.Current.CurrentHandler as Page;
if (page != null)
{
page.PreInit += new EventHandler(page_PreInit);
}
}
void page_PreInit(object sender, EventArgs e)
{
Page page = sender as Page;
if (page != null)
{
// Is there a master page defined?
if (page.MasterPageFile != null)
{
// only change the application.master files as those are the offenders
if (page.MasterPageFile.Contains("application.master"))
page.MasterPageFile = "/_catalogs/masterpage/ sample_application.master";
}
}
}
public void Dispose()
{
}
}
Далее открываем web.config и прописываем туда наш Handler
<httpModules>
<add name="AppMasterHandlerModule" type=" Samples.Modules.MasterPageModule, Samples, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c5bb9526235c6eae" />
</httpModules>
Теперь на всем портале будет применен наш кастомизированный masterpage