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

XSL/XSLT/XPATH XML Discussion :

[XSLT] Ordre d'application de templates


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut [XSLT] Ordre d'application de templates
    Salut,

    Je souhaiterais pouvoir définir l'ordre dans lequel doivent s'appliquer mes templates sans tenir compte de l'ordre de mon fichier xml, mais évidemment si je poste encore par ici, c'est que je ne sais pas si c'est possible...

    J'ai dans toutes mes feuilles xslt des includes qui peuvent être parfois différents, exemple en gros d'une de mes pages xsl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:include href="basepage.xsl" />
    <xsl:include href="listecategorie.xsl" />
    <xsl:include href="sondage.xsl" />
     
    <xsl:template match="contenu_de_ma_page">
    ...
    </xsl:template>
    Dans basepage.xsl, j'ai donc toute la structure principale de mon html, et où je me sert de <xsl:apply-templates select="suivant_le_contexte" />

    listecategorie.xsl et sondage.xsl doivent être affiché dans une même colonne de ma page, jusqu'ici, pas de problème.

    Mais si dans mon xml les infos relatives au sondage se trouvent avant ceux de ma liste de catégories, il apparaît t avant, et moi je ne veux pas

    Donc, je cherche un moyen de pouvoir définir l'ordre d'application de mes templates.

    Est-ce possible ?

    Merci de vos réponses.

  2. #2
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    l'ordre d'exécution des templates est l'ordre des appels.
    peux tu nous donner un exemple complet xsl et xml afi qu'on regarde mais à mon avis si tuveux qu'on appel liste catégorie avant sondage il suffit d'écrire tes appels templates catégorie avant sondage

  3. #3
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    L'attribut priority est là pour gérer les conflits entre différents templates

  4. #4
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Salut, et merci de vos réponses, pour ce qui concerne le priority, je ne pense pas que ce me soit nécessaire, car je n'ai pas de conflit entre mes différents templates.

    Et pour ce qui concerne l'ordre des appels, bien non, ce n'est pas lui qui est prit en compte, mais bien l'ordre établi dans mon xml.

    Je vous montre un exemple très simplifié :

    Code xml : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="page.xsl"?>
    <page>
       <titre>test application templates</titre>
       <colonne>
          <sondage>
             <question>Préférez-vous la campagne ou la ville ?</question>
             <reponse>
                <item id="1">La ville</item>
                <item id="2">La campagne</item>
             </reponse>
          </sondage>
          <categories>
             <categorie id="1">catégorie 1</categorie>
             <categorie id="2">catégorie 2</categorie>
          </categories>
       </colonne>
       <contenu>
          * Vestibulum lobortis aliquet ante.
          * Vivamus a pede eget elit accumsan congue.
          * Sed ornare imperdiet tortor.
          * Etiam id odio ut felis iaculis pulvinar.
          * Suspendisse mattis blandit quam.
          * Nam malesuada risus eget risus.
          * Donec rhoncus tristique dui.
          * In at magna id eros scelerisque interdum.
       </contenu>
    </page>

    Donc suit page.xsl
    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
    17
    18
    19
    20
    21
    22
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Strict//E" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" />
     
    <xsl:include href="categorie.xsl" />
    <xsl:include href="sondage.xsl" />
     
    <xsl:template match="/page">
    <html>
    <body>
       <div style="margin: 0; float: left; width: 200px">
          <xsl:apply-templates select="colonne" />
       </div>
       <div style="margin: 0 0 0 200px">
          <h1><xsl:value-of select="titre" /></h1>
          <xsl:value-of select="contenu" />
       </div>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>
    Là, j'appelle bien dans mes includes categorie.xsl avant sondage.xsl

    Les fichiers categorie.xsl et sondage.xsl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:template match="/page/colonne/categories">
          <ul>
             <xsl:for-each select="categorie">
                <li><a href="http://index.php?cat={@id}"><xsl:value-of select="current()" /></a></li>
             </xsl:for-each>
          </ul>
       </xsl:template>
    </xsl:stylesheet>
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:template match="/page/colonne/sondage">
          <form action="" method="post">
             <p><xsl:value-of select="question" /></p>
             <xsl:for-each select="reponse/item">
                <p>
                   <label for="r{@id}"><xsl:value-of select="current()" /></label>
                   <input id="r{@id}" type="radio" name="rep" value="{@id}" />
                </p>
             </xsl:for-each>
             <p><input type="submit" value="Voter" /></p>
          </form>
       </xsl:template>
    </xsl:stylesheet>
    J'ai donc le sondage avant la liste des catégories, alors que l'appel des includes est dans le bon ordre.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Ben l'ordre des include c'est pas l'ordre des appels et ton appel est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="colonne" />
    ne spécifie aucun ordre donc prend celui du xml.
    Fait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:apply-templates select="colonne[./categories]" />
    <xsl:apply-templates select="colonne[./sondage]" />

  6. #6
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Oui, mais je ne peux pas faire ça, car en réalité mes includes ne se situent pas dans page.xsl, mais dans la page qui génère mon contenu, ce qui fait que dans page.xsl je ne connais pas ce qui a été inclus.

    En gros ma page principale qui s'occupe de générer la structure principale de ma page et où j'applique mes apply-templates.

    Dans mes sous-pages s'occupant de générer mon contenu qui différe donc selon les pages de mon site, j'appelle en include ma page principale, et d'autres includes pour les modules dont j'ai besoin uniquement sur ces pages.

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

Discussions similaires

  1. [XSLT] Peut-on appeler une template dans une javascript?
    Par nain-foire dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/10/2006, 15h41
  2. [XSLT]Contenu mixte et apply-template
    Par virgul dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 06/10/2006, 10h24
  3. Ordre d'application de style CSS
    Par DanZzz dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 26/08/2006, 11h45
  4. [XSLT]utilisation de l'apply template
    Par koudjo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/07/2006, 13h14
  5. [XSLT] Problème d'application de template
    Par kobe dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 29/06/2006, 14h14

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