2009-03-18 16 views
1

Kann jemand die Masterseite (z. B. default.master) für eine WSS 3.0-Site anpassen? Eigentlich weiß ich bereits, wie man die Masterseite anpasst (d. H. Über SharePoint Designer oder einen Texteditor). Ich bin mehr daran interessiert zu erfahren, wie ich WSS 3.0 mitteilen kann, meine benutzerdefinierte Masterseite zu verwenden.Anpassen von default.master in WSS 3.0

Ich habe die default.master mit meiner angepassten Version umbenannt und das funktioniert, aber das setzt es für alle WSS-Sites. Ich möchte Version A einer Musterseite für die Websitesammlung A und eine separate Musterseite für andere Websitesammlungen verwenden können.

Hinweis, ich verweise NICHT auf MOSS 2007. Ich weiß bereits, wie man die Masterseite für MOSS 2007 einstellt. Ich kann jedoch nicht herausfinden, wie man es für WSS 3.0 tut.

Danke.

Antwort

2

WSS-Seiten verwenden Masterseiten wie normale Webanwendungen. Wenn das Attribut MasterPageFile jedoch ein Token ist, wird der Wert auf "~ default.master" gesetzt. Dieses Token wird in der PreInit-Methode der Seite durch den tatsächlichen Verweis auf die Masterseite ersetzt.

Sie können den Wert von ~ default.master auf alles ändern, was Sie möchten. Aber eine bessere Lösung besteht darin, dieselbe Art von Aufgabe zu erledigen, die SharePoint leistet.

Ich habe meiner SharePoint-Website einen HttpHandler hinzugefügt. Der Handler hängt an die PreRequestHandlerExecute-Methode an und ändert den Wert des Masterseite-Dateiattributs, bevor SharePoint mit dem Rendern der Seite beginnt.

Fügen Sie eine Zeile in die Httpmodules Abschnitt der web.config, die wie folgt aussieht:

Dann eine Klasse wie folgt erstellen:

Namespace MyClassLibrary.Utility { public class MasterPageHttpModule: IHttpModule { public void Init (HttpApplication-Kontext) { context.PreRequestHandlerExecute + = neuer 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() 
    { 
    } 
} 

}

Jetzt sind Sie dynamisch eine mater Seite wählen.

2

Sie müssen die MasterUrl-Eigenschaft für das SPWeb-Objekt ändern, das die Site darstellt. Eine gute Möglichkeit ist das Erstellen einer SharePoint-Funktion, die bei Aktivierung die Eigenschaft festlegt und bei Deaktivierung den ursprünglichen Wert wiederherstellt. Die Feature.xml könnte wie folgt aussehen:

<?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> 

Die Datei Masterpage.xml uploads Masterseite zur Galerie:

<?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> 

Fügen Sie diese Funktion in einer WSP-Lösung zusammen mit dem MyAssembly.dll enthält die MyFeatureReceiver-Klasse, die so geht:

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) 
    { 
    } 
} 

Schließlich stellen Sie die Lösung und aktivieren Sie die Funktion auf Ihrer Website (s).

Verwandte Themen