La idea es que cada usuario tenga un sitio en donde poder definir cual Hoja de Estilo desea utilizar, desde una cierta cantidad de Hojas predeterminadas, de tal forma que SharePoint muestre las páginas de una forma personalizada. Por el estilo de los Temas en WSS, pero a nivel de Portal.
En realidad, toda la infraestructura para hacer que los usuarios mismos escojan la Hoja de Estilo que desean ya esta presente en SharePoint. Lo único que es necesario es utilizar un WebControl extra en cada pagina aspx, y darle la posibilidad al usuario de poder escoger (y guardar su preferencia) en el sistema.
Para guardar la preferencia del usuario se puede usar la Base de Datos de Perfiles. Vaya a (tiene que estar en el sistema como Administrador) "Configuración del sitio" -> "Administrar base de datos de perfiles" -> "Agregar propiedad de perfil" -> en "Nombre" escoja "MiHojaDeEstilo", en "Nombre para mostrar" "Mi Hoja de Estilo", en el "Tipo" "número entero", y luego Configuración "Privada", editar "Permitir…", y aceptar los cambios.
Esto crea una nueva propiedad en la Base de Datos de Perfiles en donde el usuario puede definir que Hoja de Estilo desea utilizar. En este ejemplo se utilizan números para identificar las diferentes Hojas, pero se pueden utilizar nombres, si es necesario (cambiar el WebControl de la manera indicada mas abajo)
El WebControl lee la Base de Datos de Perfiles del usuario, y basado en su Hoja de Estilo, crea un nuevo tag en la página que fuerza la utilización de su estilo:
protected override void Render(HtmlTextWriter output)
{
string strOutput = string.Empty;
string strMiHojaDeStilo = string.Empty;
try
{
TopologyManager myTopMan = new TopologyManager();
PortalSite myPorSite = myTopMan.PortalSites[new Uri(_ServerUrl)];
PortalContext myPorCon = PortalApplication.GetContext(myPorSite);
UserProfileManager myUserProMan = new UserProfileManager(myPorCon);
SPSite mySite = new SPSite(_ServerUrl);
SPWeb myWeb = mySite.OpenWeb();
UserProfile myUserProfile = myUserProMan.GetUserProfile(myWeb.CurrentUser.LoginName);
try //Si no hay un estilo definido, aqui se genera un error...
{
strMiHojaDeStilo = myUserProfile["MiHojaDeEstilo"].ToString();
}
catch
{
strMiHojaDeStilo = "0";
}
switch(strMiHojaDeStilo)
{
case("0"): //Si utiliza nombres en el Perfil, cambie el "case" de forma consecuente
{
break;
}
case("1"):
{
strOutput = "<link rel=\"stylesheet\" type=\"text/css\" href=\"/_layouts/3082/styles/gavd.css\">";
break;
}
}
output.Write(strOutput);
}
catch(Exception ex)
{
output.Write(ex.ToString());
}
}
El WebControl tiene una propiedad ("ServerURL") para definir el URL del Portal. De resto, identifica al usuario, encuentra la Hoja de Estilo que desea utilizar y, basado en su preferencia, crea el tag necesario.
Para instalar el WebControl siga las instrucciones del articulo "WebControls en SharePoint". En resumen, tiene que crear un Strong Name para el WebControl, copiarlo al directorio "bin" de la raiz de IIS, y registrarlo en la(s) página(s) que desea utilizarlo. El registro y utilización en cada página aspx se verá de la siguiente forma:
En el codigo del WebControl solamente se ha definido una Hoja de Estilo extra (número 1), que contiene una sola clase para cambiar el color del titulo de la página:
.ms-pagetitle
{
color: #CC6633;
}
Pero se pueden definir tantas Hojas de Estilo como sea necesario, y cada Hoja puede ser tan completa como se desee. Modifique el código del WebControl consecuentemente con las Hojas que necesite definir.
El resultado es que para un usuario la pagina principal se verá de forma normal (si el usuario no ha definido ninguna Hoja de Estilo)
Y otro usuario que ha definido "1" como Hoja de Estilo verá: