jeudi 15 novembre 2007

Menu programmatique avec un style personnalisé sous ECM 2007

Dans cet article en va procéder la création d’un web part menu dynamique programmatique sous ECM 2007 en appliquant un style personnalisé facilement
La procédure c’est de boucler sur les collections du site, les sous site et les pages puis en va récupérer les titre et les liens soit des sites soit des pages et les mettre dans MyLiteral qui contient tout le contenu html de mon menu et à base de ces éléments le web part génère le menu
source Code du WebPart


using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using Microsoft.SharePoint.Navigation;
using Microsoft.SharePoint.Publishing.Navigation;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Administration;
namespace Menu
{
public class Menu : WebPart
{
string MyUrl = "";
int i = 0;
private const string defaultText = "TemsamaniMenu";
private string sitename = defaultText;
[Browsable(true), Category("MenuTems"), DefaultValue(defaultText), WebPartStorage(Storage.Personal),
FriendlyName("SiteName"), Description("SiteName Property")]
public string SiteName
{
get
{
return sitename;
}
set
{
sitename = value;
}
}
protected override void CreateChildControls()
{

LiteralControl myLiteral = new LiteralControl();

myLiteral.Text = "Fill SiteName Property";
// L'url des images utiliser dans ce menu
MyUrl = "/Style Library/imgs/";
//Délcaration des sources des donneés ce base sur le site map
SiteMapDataSource siteMap = new SiteMapDataSource();
SiteMapNodeCollection baseCollection;
SiteMapNodeCollection childCollection;
//CurrentNode c.à.d Le menu va commencé à partir du site courant
sitename = "CurrentNode";
if (sitename != "TemsamaniMenu")
{
myLiteral.Text = "";
if (sitename == "CurrentNode")
{
if (SiteMap.CurrentNode.GetType().ToString() == "Microsoft.SharePoint.Publishing.Navigation.PortalListItemSiteMapNode")
{
baseCollection = new SiteMapNodeCollection(SiteMap.CurrentNode.ParentNode);
childCollection = SiteMap.CurrentNode.ParentNode.ChildNodes;
}
else
{
baseCollection = new SiteMapNodeCollection(SiteMap.CurrentNode);
childCollection = SiteMap.CurrentNode.ChildNodes;
}
}
else
{
baseCollection = new SiteMapNodeCollection(SiteMap.RootNode);
childCollection = SiteMap.RootNode.ChildNodes;
}

baseCollection.AddRange(childCollection);
//Bouclé sur les collection du site
foreach (SiteMapNode node in baseCollection)
{
// Verifier si ces elements sont des pages ou des sous sites
if (node.GetType().ToString() == "Microsoft.SharePoint.Publishing.Navigation.PortalWebSiteMapNode")
{
//Appliqué un style personnalisé
OpenTableLevel1(node.Title, node.Url, ref myLiteral);
//---------------------------------------------------------------------------------
SiteMapNodeCollection ChildebaseCollection = new SiteMapNodeCollection(node);
SiteMapNodeCollection Childe = node.ChildNodes;
ChildebaseCollection.AddRange(Childe);
OpenTableLevel2(ref myLiteral);
//Bouclé sur les sous collection du site
foreach (SiteMapNode node1 in ChildebaseCollection)
{
if (node1.GetType().ToString() == "Microsoft.SharePoint.Publishing.Navigation.PortalListItemSiteMapNode")
{
//Appliqué un style personnalisé
CreateRow(node1.Title, node1.Url, ref myLiteral);
InsertSeparator(ref myLiteral);

}
}
//Appliqué un style personnalisé
CloseTableLevel2(ref myLiteral);

//---------------------------------------------------------------------------------
//Appliqué un style personnalisé
CloseTableLevel1(ref myLiteral);


}
}
}
//Ajouter le Conteneur html a la page
Controls.Add(myLiteral);


}
public override void RenderControl(HtmlTextWriter writer)
{
RenderChildren(writer);
}

2 commentaires:

Mohamed Temsamani a dit…

Menu programmatique avec un style personnalisé sous ECM 2007, Je suis à votre disposition si vous voullez d'autre explication

lonesomedove a dit…

i have tried your menu web part and it gives the 6 errors like this one:
The name 'CreateRow' does not exist in the current context
i will appreciate it if you answer me soon