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

- Nouveau système d'aide pour Visual Studio 2010 : pour ceux qui n'apprécient pas trop l'absence d'index... par CoqBlog le il y a 3 heures et 52 minutes

- L'interface naturelle de Windows Phone 7 Series par Perspective le il y a 5 heures et 9 minutes

- Comment mapper une vue SQL sur une collection de complex type? par Matthieu MEZIL le 03-19-2010, 21:05

- SQL Server : Query Notification ou comment être notifié de modifications de données côté application (SqlDependency) par SQL Server vu par Christian Robert le 03-19-2010, 15:06

- [WF4] Un Binding Activity/ActivityDesigner qui passe mal? par Blog de Jérémy Jeanson le 03-19-2010, 13:42

- MyTIC – SharePoint 2010 : déjà un mythe Microsoft ? par Le Blog (Vert) d'Arnaud JUND le 03-19-2010, 08:54

- TechDays 2010 Genève : Retrouvez-moi pour une session sur la Haute disponibilité et le ScaleOut avec SQL Server par SQL Server vu par Christian Robert le 03-18-2010, 15:45

- [MIX10] Keynote deuxième journée – Internet Explorer 9, Html5, Visual Studio 2010, OData par Atteint de JavaScriptite Aiguë [Cyril Durand] le 03-17-2010, 19:40

- Certifications beta .NET 4 par Kévin Gosse le 03-17-2010, 19:33

- [Mix 2010] – Microsoft Translator Technology Preview V2 par RedoBlog - The .NET Gentleman !!! le 03-17-2010, 18:53