Layouts folder location in sharepoint 2010/2013
No i stało. Oficjalnie wyszedł długo oczekiwany następca sharepointa 2010, czyli sharepoint 2013. Zapewne posiada wiele ciekawych funkcji i udogodnień, natomiast pierwszą rzeczą, która rzuca się w oczy, to fakt, że projekty napisane w sharepoint 2010, które planujemy wdrożyć dla sharepointa 2013 powinny być skonwertowane na typ projektu ‘sharepoint 2013’. Projekt po takiej konwersji nie może zostać użyty w ‘sharepoint 2010’. W praktyce jesteśmy więc zmuszeni do stworzenia dwóch projektów obok siebie i wymuszenia, aby oba projekty posiadały wspólne pliki .cs (niestety, ale inne pliki, czyli aspx, ascx, css, js, xml, png, i cała reszta plików umieszczana zazwyczaj w ‘layouts’ musi być zdublowana i znajdować się w obu projektach).
Gdyby jednak tego było mało, to folder layouts w nowym sharepoincie nie nazywa się ‘layouts/’ (tak jak to było w sharepoint 2010), tylko… ‘layouts/15/”.
Na szczęście jest sposób, aby można było wykorzystywać te same pliki .cs w obu projektach. Oto on, czyli klasa UrlHelper:
public class UrlHelper {
public static string LayoutsUrl { get { PropertyInfo pi = typeof(SPUtility).GetProperty(
“ContextLayoutsFolder”, BindingFlags.Public | BindingFlags.Static);
if (pi == null) return ”/_layouts/”; else return String.Format(”/{0}/”, pi.GetValue(null, null).ToString()); }
}
public static string ImagesUrl { get { PropertyInfo pi = typeof(SPUtility).GetProperty(“ContextImagesRoot”, BindingFlags.Public | BindingFlags.Static);
if (pi == null) return ”/_layouts/images/”; else return String.Format(“{0}”, pi.GetValue(null, null).ToString()); }
}
public static string ControlTemplatesUrl { get { PropertyInfo pi = typeof(SPUtility).GetProperty(“ContextControlTemplatesFolder”, BindingFlags.Public | BindingFlags.Static);
if (pi == null) return ”/_CONTROLTEMPLATES/”; else return String.Format(”/{0}/”, pi.GetValue(null, null).ToString());
} } }
W praktyce, wszędzie, gdzie odwołujemy się do katalogów związanych z ‘layouts’, zamiast wpisywać stringi, powinniśmy wykorzystać metodę klasy UrlHelper.