Publié dimanche 13 avril 2008 22:26 par Adrien Siffermann

[MOSS 2007] Définir les propriétés de navigation de portail dans le fichier Onet.xml

Si l'on observe le fichier Onet.xml du template de site Publishing fourni en standard, on peut noter l'activation d'une feature de scope Web déterminant les options de navigation de portail :

      <WebFeatures>

      ...

        <Feature ID="541F5F57-C847-4e16-B59A-B31E90E6F9EA">

          <Properties xmlns="http://schemas.microsoft.com/sharepoint/">

            <Property Key="InheritGlobalNavigation" Value="true"/>

            <Property Key="ShowSiblings" Value="true"/>

            <Property Key="IncludeSubSites" Value="true"/>

          </Properties>

        </Feature>

      ...

      </WebFeatures>

On voit que la feature est accompagnée de propriétés. Ce qui nous intéresse alors est de savoir quelles sont les propriétés acceptées par la feature, quelles valeurs peut-on leur donner, et quel impact cela aura sur la navigation du site.

En poussant un peu notre investigation, on retrouve cette feature dans le répertoire [12]\TEMPLATE\FEATURES\NavigationProperties. Le fichier Feature.xml qu'il contient définit la feature comme suit :

<Feature  Id="541F5F57-C847-4e16-B59A-B31E90E6F9EA"

          Title="Portal Navigation Properties"

          Description="Set per-site navigation properties."

          Version="12.0.0.0"

          Scope="Web"

          Hidden="TRUE"

          ReceiverAssembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"

          ReceiverClass="Microsoft.SharePoint.Publishing.NavigationFeatureHandler"

          xmlns="http://schemas.microsoft.com/sharepoint/">

  <ElementManifests>

    <ElementManifest Location="NavigationSiteSettings.xml"/>

  </ElementManifests>

</Feature>

Notons au passage que le fichier NavigationSiteSettings.xml déclaré en tant que ElementManifest est un fichier vide. Nous allons alors explorer la classe Microsoft.SharePoint.Publishing.NavigationFeatureHandler avec Reflector pour voir quelles informations elle traite.

 

Nous pouvons alors voir toutes les propriétes qu'accepte la feature "Portal Navigation Properties", à savoir :

  • IncludeInGlobalNavigation
  • IncludeInCurrentNavigation
  • InheritGlobalNavigation
  • InheritCurrentNavigation
  • ShowSiblings
  • IncludeSubSites
  • IncludePages
  • OrderingMethod
  • AutomaticSortingMathod (oui, Mathod et pas Method)
  • SortAscending

Ces noms évoquent sans doute quelque chose aux habitués de la plateforme de publication de MOSS 2007. En effet, on peut paramétrer ces options sur un site grâce à l'interface utilisateur dans la page "/_layouts/AreaNavigationSettings.aspx" accessible depuis le menu des actions du site

Afin de mieux se rendre compte de l'impact de chaque option sur la navigation, nous allons voir pour chacune d'entre elles les valeurs possibles ainsi que la répercussion sur cette page d'administration.

 

IncludeInGlobalNavigation et IncludeInCurrentNavigation

Ces deux options sont un peu particulières puisqu'elles définissent si le site courant doit être inclus dans la navigation actuelle ou globale du site parent. Ainsi, pour agir sur ces options avec l'interface utilisateur, il faut remonter au niveau supérieur et choisir de masquer ou non le sous-site dans les sections de navigation actuelle et globale.

Valeurs possibles :

  • true - Inclut le site dans la navigation (actuelle ou globale).
  • false - N'inclut pas le site dans la navigation (actuelle ou globale).

 

IncludeSubSites et IncludePages

Ces deux options indiquent si les pages ou les sous-sites doivent être automatiquement inclus dans la navigation. Notons que si la navigation hérite du site parent, ces options n'ont aucun sens.

Valeurs possibles :

  • true - Inclut les pages ou les sous-sites.
  • false - N'inclut pas les pages ou les sous-sites.

 

OrderingMethod

Cette option permet de définir le tri de tous les éléments de navigation.

Valeurs possibles :

  • Automatic - Trie tous les types d'éléments automatiquement, et groupe les pages après tous les autres types.
  • ManualWithAutomaticPageSorting - Trie tous les types d'éléments manuellement, à l'exception des pages, qui sont groupées et triées automatiquement après les autres types.
  • Manual - Trie tous les types d'éléments manuellement.

 

AutomaticSortingMathod

Cette option, qui n'a de sens que si OrderingMethod n'a pas été défini à "Manual", permet de préciser le critère de tri automatique des éléments de navigation.

Valeurs possibles :

  • Title - Trie les éléments alphabétiquement par leur titre.
  • CreatedDate - Trie les éléments par leur date de création.
  • LastModifiedDate - Trie les éléments par leur date de dernière modification.

 

SortAscending

Cette option, qui n'a de sens que si OrderingMethod n'a pas été défini à "Manual", permet de préciser l'ordre de tri automatique des éléments de navigation.

Valeurs possibles :

  • true - Trie les éléments par ordre croissant.
  • false - Trie les éléments par ordre décroissant.

 

InheritGlobalNavigation

Cette option permet de définir l'héritage ou non de la navigation globale du site.

Valeurs possibles :

  • true - Affiche les mêmes éléments de navigation que le site parent.
  • false - Affiche les éléments de navigation sous le site actuel.

 

InheritCurrentNavigation et ShowSiblings

Il est un peu moins trivial de comprendre l'impact de ces deux options. Premièrement, il est à noter qu'elles agissent sur l'affichage de la navigation actuelle. Or, si l'on regarde l'interface utilisateur, on s'aperçoit que trois options différentes nous sont proposées :

Pour reproduire ces paramètres dans les propriétés de la feature, il va nous falloir combiner les valeurs des deux options InheritCurrentNavigation et ShowSiblings.

  • InheritCurrentNavigation = true et ShowSiblings = false donnera :

     
  • InheritCurrentNavigation = false et ShowSiblings = true donnera :


  • InheritCurrentNavigation = false et ShowSiblings = false donnera :

 

Grâce à toutes ces propriétés de la feature "Portal Navigation Properties", vous avez la possibilité de définir précisemment la navigation de vos sites de publication personnalisés directement à sa création.

Il est à noter que vous pouvez également changer toutes ces options via le modèle objet en récupérant l'objet PublishingWeb correspondant à votre site.

 

            using (SPSite site = new SPSite("http://localhost"))

            {

                using (SPWeb web = site.RootWeb)

                {

                    PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web);

 

                    pubWeb.IncludeInGlobalNavigation = true;

                    pubWeb.IncludeInCurrentNavigation = true;

 

                    pubWeb.IncludeSubSitesInNavigation = true;

                    pubWeb.IncludePagesInNavigation = true;

 

                    pubWeb.NavigationOrderingMethod = OrderingMethod.ManualWithAutomaticPageSorting;

                    pubWeb.NavigationAutomaticSortingMethod = AutomaticSortingMethod.Title;

                    pubWeb.NavigationSortAscending = false;

 

                    pubWeb.InheritGlobalNavigation = true;

 

                    pubWeb.InheritCurrentNavigation = false;

                    pubWeb.NavigationShowSiblings = true;

                }

            }

 

Adrien

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

# re: [MOSS 2007] Définir les propriétés de navigation de portail dans le fichier Onet.xml @ lundi 14 avril 2008 18:12

Encore un sujet qui est imbouffable dans un post de blog.

Le sujet est vraiment intéressant et le post est déjà structuré, il n'y a quasiment rien à faire pour le transformer en article incontournable pour tous les développeurs SharePoint.

Sur les blogs codes-sources et avec le Summit en ce moment, dans 2 jours il deviendra invisible, ce qui est vraiment dommage.

Fabrice

ROMELARD Fabrice

# re: [MOSS 2007] Définir les propriétés de navigation de portail dans le fichier Onet.xml @ lundi 14 avril 2008 22:56

Bonsoir Fabrice,

Tout d'abord merci pour ton commentaire, car même si l'accroche n'est pas tout à fait positive, je le prends comme un compliment Wink

Tu as raison, le sujet est intéressant, tout comme il est vaste si on y ajoute toutes les options de publication. Et pour ne rien te cacher, je prépare justement un article sur ce sujet global Smile

Adrien

Adrien Siffermann

# re: [MOSS 2007] Définir les propriétés de navigation de portail dans le fichier Onet.xml @ mardi 15 avril 2008 01:13

Effectivement, il faut le prendre positivement, car c'est bien le cas.

Pour l'article, tu devrais le découper en morceau lorsque le sujet est justement vaste, afin de ne pas perdre les lecteurs avec un sujet trop long et qui paraît du coup inabordable.

Il vaut mieu découper celui-ci en plusieurs parties qui se suivent (un peu comme les séries TV) qui vont inviter les lecteurs à lire les différentes parties l'une après l'autre.

Le mieux est de rester dans la 20aine de pages avec beaucoup de captures (aérées si possible) afin de ne pas être trop massif, si possible avec une version téléchargable.

Bonne chance, n'hésite pas à me soliciter si tu as besoin de conseil.

Fabrice

ROMELARD Fabrice

# re: [MOSS 2007] Définir les propriétés de navigation de portail dans le fichier Onet.xml @ mardi 15 avril 2008 23:15

Je rejoins Fabrice

Le blog est une moyen de communication tres aisée mais surtout orienté tableau de bord, reporting et "live"

&gt;&gt;&gt; il se prête bien moins à la notion de tutoriel ou de sujet de fond

Surtout, les posts ont une durée de visibilité limité et sont incatégorisables sur le long terme

Il y a un effet hype sur le blog mais il faut pouvoir le dépasser

Je ne dis pas que c'est facile, je suis souvent le premier a me faire prendre mais je m'impose une simple régle : si il ne s'agit que de retour d'experience basé sur une recherche ou une découverte, je blog. Si je construit une facon de faire je blog en résumé et j'en prépare un vrai article de fond bien plus clair

En tout cas, ca fait plaisir de lire ce genre de contenu !!!

Enfin on commence a trouver des curieux qui démonte le evente receiver sous reflector : je me sens moins seul :)

++

themit

# re: [MOSS 2007] Définir les propriétés de navigation de portail dans le fichier Onet.xml @ mercredi 16 avril 2008 22:00

Merci à vous deux pour vos encouragements et conseils Smile

Il est vrai que ce n'est pas toujours évident de bien délimiter un sujet et de faire le tri entre toutes les idées ou astuces rencontrées pendant ses développements, et tout ça reste quand même encore nouveau pour moi... Wink

Adrien Siffermann


Les 10 derniers blogs postés

- un Pacman en Silverlight 2b2 par Pierrick's Blog le il y a 4 heures et 27 minutes

- Une table -> deux entity types sans colonne discriminante en base, gestion des relations par Matthieu MEZIL le il y a 12 heures et 26 minutes

- ssdl view et TPT par Matthieu MEZIL le 07-05-2008, 02:04

- L'injection SQL n'est PAS un problème QUE pour les développeurs web ! par CoqBlog le 07-05-2008, 01:08

- Un outil pour réaliser des animations WPF basées sur des équations de Bézier par Perspective le 07-04-2008, 21:45

- Sandcastle et CodePlex : le verdict par CoqBlog le 07-04-2008, 20:53

- ssdl view et TPH par Matthieu MEZIL le 07-04-2008, 19:12

- Webcasts sur le Parallel Framework disponibles par Matthieu MEZIL le 07-04-2008, 17:26

- [Silverlight] - Comprendre et Débuter avec Silverlight par Danuz le 07-04-2008, 12:41

- SharePoint : Nouvel article sur l'exportation et Importation de sites SharePoint par Blog Technique de Romelard Fabrice le 07-04-2008, 01:00