16 März 2010

Themes unter SharePoint 2010

SharePoint 2010 bietet eine neue Theming Engine. Ein Theme wird neu in einer THMX Datei abgelegt. Diese Datei kann in einem Office Client Programm erstellt werden oder aber über das Web UI zusammengeklickt werden. Im 14-Hive findet sich zwar noch ein Theme Ordner mit all den CSS Dateien und Bildern, dieser wird aber nur für Visual Upgrade verwendet. Neue Themes werden in der Theme Gallery innerhalb der Site Collection abgelegt.

Ein Theme beinhaltet Informationen über 12 Farben und zwei Schriftarten. Out-of-the-Box CSS Dateien sind mit Comments versehen, welches sich auf diese 12 Farben und die zwei Schriftarten beziehen. Wird ein Theme angewendet, werden in in den bestehenden CSS die Farben und Schriftarten ersetzt und in neuen Dateien abgelegt. Zusätzlich werden auch die Bilder neu eingefärbt.

Anbei ein Beispiel der comment-style Markup Sprache in CSS Dateien.

.class
{
/*[ReplaceColor(themeColor:“Accent5—Darker”)]*/
border:solid 1px #4f4f4f;
/*[RecolorImage (themeColor: “Accent2”, method: “Tinting”)]*/
background—image: url(“/_layouts/images/nav.gif”);
}


Mit diesem Vorgehen können natürlich nicht sämtliche Anforderungen abgedeckt werden. Teilweise muss ein Alternate CSS angegeben werden oder gar die Master Page customized werden.

Deployment

Hat man einmal ein Theme über das Web UI zusammen geklickt, kann man die THMX Datei mit dem SharePoint Designer extrahieren und in einem WSP deployen oder aber in eine andere Theme Gallery hochladen.

Im SharePoint Designer kann über das Site Object “All Files” auf den Ordner “Themes” zugegriffen werden. Hier kann die THMX Datei nun exportiert werden.

image

Will man sie nun via WSP verteilen, kann mittels Visual Studio 2010 ein neues “Empty SharePoint Project” erstellt und ein Module eingefügt werden. Die Datei Elements.xml in diesem Module (hier habe ich es “Theme” genannt) sieht folgendermassen aus:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="Theme" Url="_catalogs/theme" RootWebOnly="TRUE">
<File Path="Theme\MyTheme.thmx" Url="MyTheme.thmx" Type="GhostableInLibrary">
<Property Name="Title" Value="MyTheme.thmx" />
<Property Name="Title" Value="MyTheme.thmx" />
</File>
</Module>
</Elements>


Code

Um das neue Theme im Code anzuwenden, darf nicht die Methode ApplyTheme() aus SPWeb verwendet werden. Hierfür steht eine neue Klasse (ThmxTheme) zur Verfügung, welche diese Aufgabe übernimmt:

ThmxTheme theme = ThmxTheme.Open(web.Site, "/_catalogs/theme/MyTheme.thmx");
theme.ApplyTo(web, true);


Obwohl die neue Theming Engine von SharePoint 2010 nicht alle Bedürfnisse abgedeckt, ist die Lösung doch brauchbar.

1 Kommentar:

Harry hat gesagt…

Themes sind cool, custom CSS files besser: Mal SharePoint Online Designer ausprobieren!?

http://www.nextflow.at/designer/designer.aspx