none
Développement d'un menu de navigation global personnalisé à appliquer à toutes les Site Collection RRS feed

  • Question

  • Bonjour,

    Je souhaiterais développer une solution qui consiste à remplacer le menu horizontal de navigation de sharepoint (blue global navigation bar) par un menu personnalisé qui serait déployé en tant que solution sur toutes les site collection. Ce menu serait alimenté par des listes Sharepoint accessibles seulement à un nombre d'utilisateurs restreints responsable de maintenir ledit menu.
    La solution que j'envisage, après avoir cherché les informations et lu beaucoup (trop ?) de blogs est de créer une nouvelle master page qui sera identique à la v4.master à 99% si ce n'est la partie correspondant au menu horizontal.

    Le code C# consistant à interroger les listes à l'aide CAML et générant le HTML est prêt et fonctionnel.
    J'ai également repéré dans le fichier v4.master la section correspondant au menu :

    <SharePoint:AspMenu ID="TopNavigationMenuV4" Runat="server" EnableViewState="false" DataSourceID="topSiteMap"........... />
    Et la section, située juste après, qui correspond à la source de données alimentant le menu :
    <asp:SiteMapdataSource ShowStartingNode="false" SiteMapProvider="SPNavigationProvider" id="topSiteMap" runat="server" StartingNodeUrl="sid:1002" />

    Le tout premier test que j'ai voulu faire a été de passer en commentaire ces deux sections et de déployer cette master page en l'utilisant comme master page par défaut. Les conséquences sont les suivantes :
    - sur la page d'accueil du root site, le menu disparaît effectivement, seul reste le bandeau bleu
    - lorsque je clique sur l'onglet page le "gros menu" contenant toutes les icônes comme "Edit", "Check out", "Page History" etc n'apparaît plus : le chargement de ce Menu reste sur "Loading" indéfiniment
    - il en va de même pour tous les autres menus : par exemple, en cliquant sur une liste, aucun des onglets "Items" ou "List" situés dans le groupement d'onglets "List Tools" ne permet d'accéder aux menus dédiés

    Ma question est donc : comment est-il possible de personnaliser ou remplacer ce menu si le simple fait de le mettre en commentaire fout en l'air la quasi totalité des pages ?

    Cordialement,
    vendredi 2 novembre 2012 17:44

Réponses

  • Bonsoir, 

    Comme tu l'as bien remarqué, il est difficile d'utiliser à la fois la puissance des siteMapProvider de SharePoint et la possibilité de personnalisation. 

    Cependant, dans les cas ça reste faisable :).

    Dans le cas où tu souhaiterais utiliser les siteMapProvider, tu pourras alors modifier les propriétés css relatives aux éléments générés automatiquement. 

    Tu peux regarder par ici : 

    Dans l'autre cas, si tu n'utilises pas le SiteMapProvider, tu as le choix dans les façon d'afficher ta navigation personnalisée : 

    • Comme dans l'article de NothingButSharePoint - MegaMenu (ce qui me semble être la manière la plus proche de ce que tu veux). A noter que c'est dans l'étape 2 que tu va récupérer les informations.
    • La création d'un userControl dans lequel tu vas récupérer l'ensemble des informations souhaitées (ta navigation) et dans lequel tu vas choisir la manière dont tu vas les afficher.
      Typiquement tu pourrait utiliser le control Repeater pour l'affichage. Tu créeras alors des attributs CSS personnels.
      Plus d'infos sur les UserControl: http://msdn.microsoft.com/en-us/library/ee231548.aspx
      P
      ersonnellement, c'est vers cette solution que je me dirige régulièrement.
    • Tu pourra aussi utiliser une visual WebPart pour gérer la récupération et l'affichage.

    A noter que seule la solution du UserControl pourras être rajouté automatiquement dans la masterpage (cf. ma première réponse ;))

    J'espère que ça t'aidera à avancer,

    Jicay

    mercredi 14 novembre 2012 22:30

Toutes les réponses

  • Salut, 

    histoire d'être sûr que l'on parle de la même chose, tu veux remplacer la navigation globale :

    Si c'est bien cette navigation que tu souhaite remplacer, il faut effectivement travailler avec ce composant 

    <SharePoint:AspMenu ID="TopNavigationMenuV4" Runat="server" EnableViewState="false" DataSourceID="topSiteMap"........... />

    ou plus particulièrement son conteneur : 

    <asp:ContentPlaceHolder id="PlaceHolderHorizontalNav" runat="server">
    ...
    </asp:ContentPlaceHolder>
    

    Pour supprimer l'actuel navigation, il suffit de supprimer son contenu (ou de le mettre en commentaire).

    Tu pourra ensuite ajouter un DelegateControl afin d'y insérer le control que tu aura développé.

    Pour le contrôle :

    <asp:ContentPlaceHolder id="PlaceHolderHorizontalNav" runat="server">      
          <SharePoint:DelegateControl ID="TopNavigationBarDelegateControl" runat="server" ControlId="SiteMap" AllowMultipleControls="false" />
    </asp:ContentPlaceHolder>
    

    Ensuite dans un module : 

    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
         <Control Id="NavigationBarDelegateControl"
               Sequence="14"
               ControlSrc="~/_controlTemplates/TopNavigation.ascx"/>
    </Elements>
    

    En espérant que ça t'aide,

    Jicay

    • Proposé comme réponse JcBrabant dimanche 4 novembre 2012 11:54
    samedi 3 novembre 2012 23:07
  • Merci pour votre réponse. C'est une autre manière de voir la chose que je n'avais rencontrée sur aucun blog jusqu'à présent.
    Cela dit, avez-vous testé ce qui me pose problème (mettre la partie correspondant à ce menu en commentaire et voir le résultat) ? Je ne comprends vraiment pas pourquoi plus rien ne charge après et surtout, j'ai peur qu'en remplaçant le menu par défaut par un personnalisé, les conséquences soient les mêmes.

    Cordialement,

    lundi 5 novembre 2012 14:44
  • Bonsoir,

    La solution de JC est effectivement la bonne à mon sens...

    Un petit billet qui explique cela : http://www.helpmeonsharepoint.com/2012/03/custom-sharepoint-top-menu-and.html

    En espérant que cela vous aide ;)


    Pascal P
    http://sharepoint-afterwork.fr
    Twitter: @PascalPoeck
    Facebook : https://www.facebook.com/SharePointAfterWork

    lundi 5 novembre 2012 21:10
  • La solution est effectivement tentante mais nombre de questions restent en suspend :
    - comment faire de la navigation à trois ou quatre niveaux (par exemple : Continent>Pays>Region>Ville)
    - comment personnaliser facilement le CSS (quid des menus de style mega-menu avec des colonnes et des images à l'intérieur)

    Je suis d'accord sur l'importance de modifier la source de données mais l'aspect CSS, qui va vraiment rendre la personnalisation efficace, n'est pas abordée du tout dans cet article que j'ai lu attentivement.

    J'ai trouvé des pistes sur ce site : https://www.nothingbutsharepoint.com/sites/eusp/Pages/A-MegaMenu-for-SharePoint-2010-Using-a-DVWP-and-a-List.aspx et également sur codeplex : http://sp2010.codeplex.com/ concernant les méga menus dans SharePoint par exemple.

    Mais du coup, comme spécifié dans le billet cité dans la réponse de Pacal P, on perd la possibilité d'utiliser les fonctionnalités de base de SharePoint relatives à la sécurité et au cache.

    Finalement, la personnalisation du menu de navigation globale est soit abordée sous l'angle de la source de données (comment construire sa propre source de données), soit sous l'angle du branding (customizing the CSS) mais aucun article ne parle de faire les deux simultanément.

    Cordialement,

    mardi 6 novembre 2012 16:49
  • Bonsoir, 

    Comme tu l'as bien remarqué, il est difficile d'utiliser à la fois la puissance des siteMapProvider de SharePoint et la possibilité de personnalisation. 

    Cependant, dans les cas ça reste faisable :).

    Dans le cas où tu souhaiterais utiliser les siteMapProvider, tu pourras alors modifier les propriétés css relatives aux éléments générés automatiquement. 

    Tu peux regarder par ici : 

    Dans l'autre cas, si tu n'utilises pas le SiteMapProvider, tu as le choix dans les façon d'afficher ta navigation personnalisée : 

    • Comme dans l'article de NothingButSharePoint - MegaMenu (ce qui me semble être la manière la plus proche de ce que tu veux). A noter que c'est dans l'étape 2 que tu va récupérer les informations.
    • La création d'un userControl dans lequel tu vas récupérer l'ensemble des informations souhaitées (ta navigation) et dans lequel tu vas choisir la manière dont tu vas les afficher.
      Typiquement tu pourrait utiliser le control Repeater pour l'affichage. Tu créeras alors des attributs CSS personnels.
      Plus d'infos sur les UserControl: http://msdn.microsoft.com/en-us/library/ee231548.aspx
      P
      ersonnellement, c'est vers cette solution que je me dirige régulièrement.
    • Tu pourra aussi utiliser une visual WebPart pour gérer la récupération et l'affichage.

    A noter que seule la solution du UserControl pourras être rajouté automatiquement dans la masterpage (cf. ma première réponse ;))

    J'espère que ça t'aidera à avancer,

    Jicay

    mercredi 14 novembre 2012 22:30
  • Bonjour Ange-Pierre,

    La réponse vous convient t'il de jean-christophe brabant?

    Merci,

    Gokan


    Gokan Ozcifci Technical Blog
    SharePoint Community Expert

    lundi 19 novembre 2012 12:03