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

Bibliothèques et frameworks PHP Discussion :

[XSL] Une variable dans un xsl ?


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Invité
    Invité(e)
    Par défaut [XSL] Une variable dans un xsl ?
    Bonjour,
    Alors je vais essayer d'être clair mais ça me parait compliqué...

    J'ai trois fichiers (un XML, un XSL pour le mettre en forme et un PHP convertir le tout en HTML) qui une fois inclus dans mon site constitueront un menu dynamique.
    Afin que vous compreniez mieux, je vous met la source des 3 fichiers :

    XML :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <tabs>
    	<tab style="orange" position="7" text="A l'école">
    		<link text="L'équipe à l'école" target="/contenu/ecole/equipe.php"/>
    		<link text="Nos Actions" target="/contenu/ecole/actions.php"/>
    	</tab>
    	<tab style="blue" position="8" text="Au collège">
    		<link text="L'équipe au collège" target="/contenu/college/equipe.php"/>
    		<link text="Nos Actions" target="/contenu/college/actions.php"/>
    	</tab>
    	<tab style="green" position="9" text="L'assoc'">
    		<link text="Nous contacter" target="/contenu/assoc/contact.php"/>
    		<link text="Adhérer" target="/contenu/assoc/adhesion.php"/>
    		<link text="Proposer votre aide" target="contenu/assoc/aide.php"/>
    	</tab>
    </tabs>


    XSL :

    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
    <?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" omit-xml-declaration="yes" encoding="UTF-8" />
    	<xsl:template match="//tab[@position='9']/link">
    		<a>
    			<xsl:attribute name="href">
    				<xsl:value-of select="@target"/>
    			</xsl:attribute>
    			<xsl:value-of select="@text"/>
    		</a>
    		<br/>
    	</xsl:template>
    </xsl:stylesheet>


    PHP :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    // Nouvelle instance
    $xslt = new XSLTProcessor();
    // Chargement du fichier XML
    $xml = new domDocument();
    $xml -> load('menu.xml');
    // Chargement du fichier XSL
    $xsl = new domDocument();
    $xsl -> load('links.xsl');
    // Import de la feuille XSL
    $xslt -> importStylesheet($xsl);
    // Transformation et affichage du résultat
    echo $xslt -> transformToXml($xml);
    ?>

    En fait le problème c'est que le sélecteur XSL position doit être variable (position doit pouvoir prendre n'importe quelle valeur numérique et ce en fonction d'un argument passé à PHP.
    Concrètement, PHP doit être en mesure de me retourner les liens correspondants à l'onglet sélectionné.

    Quelqu'un voit comment on peut faire ça ?


    Merci d'avance !
    Dernière modification par Swoög ; 10/03/2007 à 23h55. Motif: code=xml & code=php pour activer la colo syntaxique

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    Je te conseille de te pencher sur les paramètres

    http://ca.php.net/manual/fr/function...-parameter.php
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai l'impression que c'est ça mais je comprends pas tout (en fait c'est l'exemple qui m'embrouille)...
    C'est quoi les arguments que je dois fournir à PHP pour setparameter() ?
    J'arrive pas à comprendre comment désigner ma ligne :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="//tab[@position='9']/link">
    du XSL.


    En tout cas merci pour la rapidité de ta réponse
    Dernière modification par Swoög ; 11/03/2007 à 06h05. Motif: code=xml pour activer la colo syntaxique

  4. #4
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Pour setParameter(), c'est simple, tout est dans la doc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xslt->setParameter(null, 'position', 9);
    Ensuite il faut déclarer le paramètre dans le fichier xsl. C'est un paramètre externe (global) et il faut donc le déclarer en top level element. Ex:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:param name="position"/>
    <xsl:template match="//tab[@position=$position]/link">
      ...
    </xsl:template>

  5. #5
    Invité
    Invité(e)
    Par défaut
    C'est la déclaration dans le XSL qui me manquait !

    Je pense que j'ai compris.

    Merci beaucoup

  6. #6
    Invité
    Invité(e)
    Par défaut
    Finalement ça marche pas...
    Je crois que c'est le $ dans le XSL qui perturbe PHP parce qu'il me renvoie ça :

    Warning: XSLTProcessor::importStylesheet() [function.XSLTProcessor-importStylesheet]: Undefined variable in C:\Test\Engine\links.php on line 11

    Warning: XSLTProcessor::importStylesheet() [function.XSLTProcessor-importStylesheet]: compilation error: file file:///C%3A/Test/Engine/links.xsl line 6 element template in C:\Test\Engine\links.php on line 11

    Warning: XSLTProcessor::importStylesheet() [function.XSLTProcessor-importStylesheet]: Failed to compile predicate in C:\Test\Engine\links.php on line 11

    Warning: XSLTProcessor::transformToXml() [function.XSLTProcessor-transformToXml]: No stylesheet associated to this object in C:\Test\Engine\links.php on line 14
    Et à la ligne 11 j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xslt -> importStylesheet($xsl);

  7. #7
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Je suis surpris que ça ne fonctionne pas. Le processeur ne semble pas accepter des variables dans les predicats 'top level' de template

    Solution alternative:

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <xsl:param name="position" />
     
    <xsl:template match="/tabs">
      <xsl:for-each select="tab[@position = $position]/link"> 
        <a href='{@target}'><xsl:value-of select="@text"/></a>
        <br/>
      </xsl:for-each> 
    </xsl:template>

  8. #8
    Invité
    Invité(e)
    Par défaut
    Finalement, j'ai trouvé tout seul : le @position ne doit pas se trouver dans le match du template, il faut créer un for-each et le mettre dans le select.


    Merci à tous !

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

Discussions similaires

  1. Passer la valeur d'une variable JS à du XSL
    Par Sophie_62 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/07/2013, 11h18
  2. [XSL] Inclure une balise dans un <xsl:if></xsl:if>
    Par hedgehog dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 08/04/2008, 13h49
  3. [XSL-FO] Variable dans un Xpath
    Par serwol dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/03/2006, 13h57
  4. comment recuperer une variable dans flash
    Par krépuscul dans le forum Flash
    Réponses: 30
    Dernier message: 16/10/2003, 09h40
  5. Réponses: 13
    Dernier message: 14/06/2003, 22h15

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