Si vous devez personnaliser un site SharePoint à faire, vous aurez sûrement besoin de référencer des feuilles de style, des images ou des scripts. Cependant, dans SharePoint, il faut toujours mettre des URLs relatives, car nous ne savons pas quelle sera l’arborescence de nos sites. Bref, c’est là que l’expression $SPUrl nous est utile … En effet, depuis une page maître par exemple, nous pouvons du coup référencer une feuille de style de la façon suivante :
<link id="MyCSS" runat="server" rel="stylesheet"
type="text/css" href="<%$SPUrl:~site/_catalogs/styles/mystyles.css%>" />
Tout ça c’est très bien, mais en creusant un peu, on se rend compte que $SPUrl est référencé dans Microsoft.SharePoint.Publishing. Du coup, cette solution n’est élégante que pour SharePoint Server. Mais moi je veux tout ça pour SharePoint Foundation!
Je pourrais toujours développer ma propre ExpressionBuilder (en m’appuyant sur ce tutorial par exemple), mais cette solution m’oblige à modifier le web.config. Ah oui, j’oubliais: dans les contraintes que j’impose, je veux en plus que mon code se déploie en mode Sandbox – du coup, bye bye les ExpressionBuilder, car dans ce mode là je ne peux modifier ce fameux web.config.
Du coup, il ne me reste plus que LA solution, un bon vieux Feature Receiver pour lier ma feuille de styles à mon site …
1: public class MyFeatureEventReceiver : SPFeatureReceiver
2: {
3: public override void FeatureActivated(SPFeatureReceiverProperties properties)
4: {
5: SPWeb web = properties.Feature.Parent as SPWeb;
6:
7: Uri css = new Uri(site.Url + "/_catalogs/styles/mystyles.css");
8: web.AlternateCssUrl = css.AbsolutePath;
9:
10: root.Update();
11: }
12:
13: ../..
Je ferais la même manipulation pour un logo, ou tout autre lien relatif que je voudrais associer à ma page maître, dans un contexte SharePoint Foundation & solutions utilisateurs.
- Julien