2009-03-18 4 views
1

Кто-нибудь знает, как настроить главную страницу (то есть default.master) для сайта WSS 3.0? На самом деле, я уже знаю, как настроить главную страницу (т. Е. Через SharePoint Designer или текстовый редактор). Меня больше интересует, как сообщить WSS 3.0 использовать мою настроенную главную страницу.Настройка default.master в WSS 3.0

Я переименовал default.master с моей настраиваемой версией и это работает, но это устанавливает его для всех сайтов WSS. Я хочу иметь возможность использовать версию A главной страницы для семейства сайтов A и отдельную главную страницу для других семейств сайтов.

Примечание. Я НЕ имею в виду MOSS 2007. Я уже знаю, как установить главную страницу для MOSS 2007. Я не могу понять, как это сделать для WSS 3.0.

Спасибо.

ответ

2

Страницы WSS используют мастер-страницы, как обычные веб-приложения. Однако значение, если атрибут MasterPageFile является токеном и имеет значение «~ default.master». Этот токен заменяется фактической ссылкой на главную страницу в методе PreInit страницы.

Вы можете изменить значение ~ default.master на все, что угодно. Но лучшим решением является выполнение того же типа вещей, что и в SharePoint.

Я добавил HttpHandler на свой сайт SharePoint. Обработчик привязан к методу PreRequestHandlerExecute и изменяет значение атрибута файла главной страницы до того, как SharePoint начнет рендеринг страницы.

Добавить строку в раздел HttpModules в web.config, который выглядит следующим образом:

Затем создайте класс вроде этого:

имен MyClassLibrary.Utility { MasterPageHttpModule общественного класса: IHttpModule { public void Init (контекст HttpApplication) { context.PreRequestHandlerExecute + = new EventHandler (context_PreRequestHandlerExecute); }

void context_PreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     bool useCustomMasterPages = Convert.ToBoolean(ConfigurationManager.AppSettings["ShowCustomMasterPages"].ToString()); 
     if (useCustomMasterPages) 
     { 
      Page page = HttpContext.Current.CurrentHandler as Page; 
      if (page != null) 
      { 
       page.PreInit += new EventHandler(page_PreInit); 
      } 
     } 
    } 

    void page_PreInit(object sender, EventArgs e) 
    { 
     bool useThreeColumnMaster = Convert.ToBoolean(ConfigurationManager.AppSettings["UseThreeColumnMasterOnDefaultPage"].ToString()); 

     try 
     { 
      Page page = sender as Page; 
      if (page != null && SPContext.Current != null) 
      { 
       string url = page.Request.Url.AbsolutePath.ToLower(); 
       if (url.IndexOf("/public/") > -1) 
       { 
        if (url.IndexOf("sitemap.aspx") == -1) 
        { 
         page.MasterPageFile = "~/_catalogs/masterpage/edge_con.master"; 
        } 
        else 
        { 
         page.MasterPageFile = ""; 
        } 
       } 
       else if (url.IndexOf("default.aspx") > -1) 
       { 
        if (useThreeColumnMaster) 
        { 
         page.MasterPageFile = "~/_catalogs/masterpage/edge_con.master"; 
        } 
        else 
        { 
         page.MasterPageFile = "~/_catalogs/masterpage/edge.master"; 
        } 
       } 
       else if (url.IndexOf("sitemap.aspx") > -1) 
       { 
        // 
        // Sitemap pages should not have a master page 
        // 
        page.MasterPageFile = ""; 
        page.Controls.Clear(); 
       } 
       else if (url.IndexOf("/admin/") > -1) 
       { 
        page.MasterPageFile = "~/_catalogs/masterpage/edge.master"; 
       } 
       else if (url.IndexOf("/member/") > -1) 
       { 
        page.MasterPageFile = "~/_catalogs/masterpage/edge.master"; 
       } 
       else if (url.IndexOf("/supplier/") > -1) 
       { 
        page.MasterPageFile = "~/_catalogs/masterpage/edge.master"; 
       } 
       else if (page.MasterPageFile == "~masterurl/default.master") 
       { 
        page.MasterPageFile = "~/_catalogs/masterpage/edge.master"; 
       } 
      } 
     } 
     catch (Exception exception) 
     { 
      LogWriter logWriter = new LogWriter(); 
      logWriter.WriteToLog("Could not set master page: " + exception.Message, LogType.MasterPage, DateTime.Now); 
     } 
    } 

    public void Dispose() 
    { 
    } 
} 

}

Теперь вы динамически выбирая страницу матер.

2

Вам необходимо изменить свойство MasterUrl на объект SPWeb, представляющий сайт. Хороший способ сделать это - создать функцию SharePoint, которая при активации устанавливает свойство, а при деактивизации восстанавливает исходное значение. Feature.xml может выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<Feature Id="8651CC66-FEB1-4255-B7E9-0DFE24367DAB" 
      Title="My Master Page" 
      Scope="Web"    
      SolutionId="06D3B01F-0C26-457a-BFA5-A1B0BC8D4225" 
      ReceiverAssembly="MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9e95445247029289" 
      ReceiverClass="MyFeatureReceiver" 
      xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <ElementManifests> 
    <ElementManifest Location="Masterpage.xml"/> 
    <ElementFile Location="my.master"/> 
    </ElementManifests> 
    <Properties> 
    <Property Key="MyMaster" Value="my.master" /> 
    </Properties> 
</Feature> 

Файл Masterpage.xml загрузит главную страницу в галерею:

<?xml version="1.0" encoding="utf-8" ?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Module Name="UploadMaster" Url="_catalogs/masterpage" > 
    <File Url="my.master" Type="GhostableInLibrary" IgnoreIfAlreadyExists="True"/> 
    </Module> 
</Elements> 

Включить эту функцию в растворе WSP вместе с MyAssembly.dll, содержащей класс MyFeatureReceiver, который выглядит следующим образом:

public class MyFeatureReceiver : SPFeatureReceiver 
{ 
    public override void FeatureActivated(SPFeatureReceiverProperties properties) 
    { 
    SPWeb web = (SPWeb)properties.Feature.Parent; 
    web.MasterUrl = properties.Definition.Properties["MyMaster"].Value; 
    web.Update();  
    } 

    public override void FeatureDeactivating(SPFeatureReceiverProperties properties) 
    { 
    SPWeb web = (SPWeb)properties.Feature.Parent; 
    web.MasterUrl = "default.master"; 
    web.Update();  
    } 

    public override void FeatureInstalled(SPFeatureReceiverProperties properties) 
    { 
    } 

    public override void FeatureUninstalling(SPFeatureReceiverProperties properties) 
    { 
    } 
} 

Наконец, развертывание решения и активировать функцию на своем сайте (ы).

Смежные вопросы