Personalización de los controles y proveedores de navegación
Última modificación: domingo, 04 de abril de 2010
Hace referencia a: SharePoint Server 2010
Para personalizar la navegación, debe usar la navegación del sitio de ASP.NET, ya que ofrece una solución estándar, coherente y de fácil administración. Para obtener más información, vea el tema sobre el Centro para desarrolladores de Microsoft ASP.NET on MSDN.
Personalización de los controles de presentación web (Menu, TreeView y SiteMapPath)
Para personalizar la apariencia y el funcionamiento de los controles de presentación estándar, puede usar hojas de estilos en cascada (CSS). También puede escribir sus propios controles ASP.NET y usarlos en la navegación de . Para obtener más información, vea la documentación de la clase System.Web.UI.WebControls.Menu.
Nota
SharePoint Server 2010 también proporciona componentes de navegación predeterminados que puede personalizar, como el elemento web Consulta por contenido (CQWP)y el elemento web Tabla de contenido. Estos dos controles se pueden configurar para presentar una selección personalizada de vínculos.
Los controles de navegación System.Web.UI.WebControls.TreeView y System.Web.UI.WebControls.Menu se enlazan con orígenes de datos de ASP.NET, para proporcionar un nivel abstracto entre los controles de navegación web y el proveedor de navegación subyacente.
Implementación de proveedores de mapas del sitio
Para implementar su propio proveedor de mapa del sitio, puede derivar una clase de proveedor personalizada de cualquiera de los proveedores de mapa del sitio predeterminados. SharePoint Server 2010 incluye varios proveedores predeterminados. También puede derivar una clase de proveedor personalizada de la clase SiteMapProvider del espacio de nombres System.Web. Sin embargo, la derivación de los proveedores de mapa del sitio de SharePoint Server 2010 ofrece varias ventajas adicionales, como el almacenamiento en memoria caché de los nodos de navegación y el recorte de seguridad. Por tanto, debe usar la infraestructura de almacenamiento en memoria caché y de recorte de seguridad de SharePoint Server 2010 en lugar de escribir sus propios elementos de almacenamiento en memoria caché y recorte de seguridad en un proveedor personalizado derivado de los proveedores personalizados.
Aunque las clases del proveedor del mapa de sitio tienen alrededor de veinte métodos virtuales o abstractos, sólo es necesario reemplazar e implementar en un proveedor de mapa de sitio personalizado una pequeña cantidad de ellos.
El siguiente ejemplo de código se deriva de la clase PortalSiteMapProvider y muestra cómo agregar elementos al proveedor del mapa de sitio.
public class CustomNavProviderWithList : PortalSiteMapProvider
{
public override SiteMapNodeCollection GetChildNodes(System.Web.SiteMapNode node)
{
PortalSiteMapNode portalNode = node as PortalSiteMapNode;
if (portalNode != null)
{
if (portalNode.Type == NodeTypes.Area)
{
SiteMapNodeCollection nodeColl = base.GetChildNodes(portalNode);
using (SPSite currentSite = new SPSite(portalNode.Url))
{
SPWeb currentWeb = currentSite.OpenWeb();
SPListCollection lists = currentWeb.Lists;
foreach (SPList list in lists)
{
string listUrl = list.DefaultViewUrl;
PortalSiteMapNode childNode = new PortalSiteMapNode(webNode, listUrl, NodeTypes.custom, list.Title, listUrl, null);
nodeColl.Add(childNode);
}
}
return nodeColl;
}
else
{
return base.GetChildNodes(portalNode);
}
}
else
{
return new SiteMapNodeCollection();
}
}
}
Public Class CustomNavProviderWithList
Inherits PortalSiteMapProvider
Public Overrides Function GetChildNodes(ByVal node As System.Web.SiteMapNode) As SiteMapNodeCollection
Dim portalNode As PortalSiteMapNode = TryCast(node, PortalSiteMapNode)
If portalNode IsNot Nothing Then
If portalNode.Type = NodeTypes.Area Then
Dim nodeColl As SiteMapNodeCollection = MyBase.GetChildNodes(portalNode)
Using currentSite As New SPSite(portalNode.Url)
Dim currentWeb As SPWeb = currentSite.OpenWeb()
Dim lists As SPListCollection = currentWeb.Lists
For Each list As SPList In lists
Dim listUrl As String = list.DefaultViewUrl
Dim childNode As New PortalSiteMapNode(webNode, listUrl, NodeTypes.custom, list.Title, listUrl, Nothing)
nodeColl.Add(childNode)
Next list
End Using
Return nodeColl
Else
Return MyBase.GetChildNodes(portalNode)
End If
Else
Return New SiteMapNodeCollection()
End If
End Function
End Class
Vea también
Referencia
Microsoft.SharePoint.Publishing.Navigation
Microsoft.SharePoint.Navigation