IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Rendre dynamique les urls dans un composant menu


Sujet :

ASP.NET

  1. #1
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut Rendre dynamique les urls dans un composant menu
    Salut,

    Voilà, j'ai un composant menu en asp .net, dont certaines resources du sitemapnode sont gérés pour la localisation des pages.

    J'ai fait par exemple ceci à partir du fichier xml web.sitemap :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          <siteMapNode  url="~/Default.aspx" 
                        resourceKey="HomePage"
                        title = "$resources:SiteMapLocalizations,HomePageTitle"
                        description ="$resources:SiteMapLocalizations,HomePageDescription" />
    Maintenant, je souhaite que si le menu est en anglais, une page différente soit appelé que pour la partie française.

    J'ai donc essayé de mettre l'url en resource également, mais là, ça ne passe pas comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <siteMapNode  url="$resources:SiteMapLocalizations,ServiceAboURL" 
                      resourceKey="Abo"
                      title = "$resources:SiteMapLocalizations,ServiceAboTitle"
                      description ="$resources:SiteMapLocalizations,ServiceAboDescription" />
    Dans la resource française, j'ai la clé "ServiceAboURL" qui pointe vers , et la version anglaise : La structure des pages ne doit pas être modifié à l'heure actuel.

    Avez-vous des pistes pour arriver à "dynamiser" les urls ?

    Merci par avance.

  2. #2
    Membre régulier
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 77
    Points : 89
    Points
    89
    Par défaut
    bonjour,

    la première idée qui me vient serait de faire deux sitemap, un pour la version francaise et un pour la version anglaise,
    et de modifier le sitemapprovider de ton menu au moment ou tu change de langue.

    par contre je n'ai pas le temps de la tester.

  3. #3
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut
    En effet c'est pas bête ;-). En avançant dans cette voie, comment peut-on procéder pour choisir tel ou tel sitemap ? C'est en fonction de la langue du navigateur auquel je pense...

  4. #4
    Membre régulier
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 77
    Points : 89
    Points
    89
    Par défaut
    tu peux récupérer les préférences de langue du navigateur client à l'aide de la propriété Request.UserLanguages qui retourne un tableau de String

    en prenant la première langue du tableau tu aura ta langue d'affichage

  5. #5
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut
    Salut,

    Finalement, j'ai résolu le problème comme suit, pour ceux que ça intéresse, par la création de 2 providers.

    1. Ajout des providers dans le web.config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        <!-- Création d'un provider pour un menu français... et anglais-->
        <siteMap defaultProvider="French" enabled="true">
     
          <providers>
            <add  siteMapFile="web_french.sitemap"
                  name="French"
                  type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, 
                        PublicKeyToken=b03f5f7f11d50a3a" />
     
            <add  siteMapFile="web_english.sitemap"
                  name="English"
                  type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, 
                        PublicKeyToken=b03f5f7f11d50a3a" />
          </providers>
     
        </siteMap>
    2. Création de 2 fichiers : web_english.sitemap et web_french.sitemap.

    Dans le fichier web_french.sitemap, on trouve les menus français, avec des chemins explicites :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="iso-8859-1" ?>
    <siteMap enableLocalization="true" xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
      <siteMapNode>
        <siteMapNode  url="~/Default.aspx" 
                      title = "Accueil"
                      description ="Retour à l'accueil" />
      </siteMapNode>
    </siteMap>
    Idem pour le fichier web_english.sitemap :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="iso-8859-1" ?>
    <siteMap enableLocalization="true" xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
      <siteMapNode>
        <siteMapNode  url="~/Default.aspx" 
                      title = "HomePage"
                      description ="Homepage" />
      </siteMapNode>
    </siteMap>
    On peut bien sûr remplacer l'url par ~/FR/...htm ou ~/EN/...htm en fonction de ce que l'on veut !

    3. Enfin, dans la page maître, on détermine le fichier à utiliser grâce à la langue du navigateur, sur l'événement Load :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
            'Affiche le menu en fonction de la langue du navigateur
            If Request.UserLanguages(0) = "fr" then
                SiteMapDataSource1.SiteMapProvider="French"
            Else
                SiteMapDataSource1.SiteMapProvider="English"
            End If
        End Sub
    Voilà, voilà... si ça peut être utile.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/08/2009, 12h19
  2. Rendre dynamique les choix dans un select
    Par Boueep dans le forum Langage
    Réponses: 16
    Dernier message: 01/02/2009, 08h57
  3. Réponses: 2
    Dernier message: 15/03/2006, 10h49
  4. ajouter dynamiquement des items dans un popup menu
    Par Malone dans le forum Composants VCL
    Réponses: 7
    Dernier message: 23/08/2005, 16h08
  5. Les champs dans un composant ADOStorecProc
    Par ZIED dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/06/2005, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo