XML et calendrier

Petit nouveau ! | 2 Messages

06 mars 2017, 20:55

Bonjour !

J'ai créé une base de donnée de projets en XML.
Via XSL j'aimerais que s'affiche un calendrier, que l'on puisse y sélectionner une date précise, et que ensuite tous les projets à livrer avant cette date s'affiche sur une page.
Alors je suppose que je dois utiliser un formulaire ? Est-ce possible ?

Voici un extrait de mon XML :
<BASE>
<project num="DN001" type="film">
		<title>Moana</title>
		<client>Disney</client>
		<deadline>
			<day>24</day>
			<month>04</month>
			<year>2017</year>
		</deadline>
</project>
</BASE>
Voici ce qui existe de mon XSL pour l'instant (il s'agit des informations que je voudrais voir s'afficher, mais il faut que je trouve un moyen d'afficher celles-ci en fonction de la date choisie dans le formulaire) :
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="BASE">
<html>
<body>
<table>
<tr>
<th>Project ID</th>
<th>Title</th>
<th>Client</th>
<th>Deadline</th>
</tr>
<xsl:for-each select="./project">
<tr>
<td><xsl:value-of select=".[email protected]"/></td>
<td><xsl:value-of select="./title"/></td> 
<td><xsl:value-of select="./client"/></td> 
<td><xsl:value-of select="./deadline"/></td>   
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Si vous avez des pistes à me donner ça m'aiderait beaucoup, je bloque dessus depuis un moment. Merci beaucoup !! :)

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8685 Messages

07 mars 2017, 11:46

salut,

tu peux passer des paramètres à ta xsl comme ici : http://stackoverflow.com/questions/1278 ... stylesheet
voir avec php : http://php.net/manual/en/xsltprocessor.setparameter.php

ensuite un if pour afficher pour pas les données.
vu que je suis pas une bête en XSL et que tu as trois champs pour la date j'ai fait un truc un peu basique

D'abord le php
<?php
$xsl = new DOMDocument;
$xsl->load('test.xsl');
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);

$xml = new DOMDocument;
$xml->loadXML('<BASE>
<project num="DN001" type="film">
    <title>Moana</title>
    <client>Disney</client>
    <deadline>
      <day>24</day>
      <month>04</month>
      <year>2017</year>
    </deadline>
</project>
</BASE>');
$proc->setParameter('', 'year', 2017);
$proc->setParameter('', 'month', 4);
$proc->setParameter('', 'day', 29); // change ici par quelque chose inférieur a 24 pour ne pas avoir la ligne de l'exemple
echo $proc->transformToXML($xml);
ensuite la xsl, indenté, parce que c'est plus facile a lire ;)
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- Les parametres que l'on va utiliser ensuite, tu met un $ devant le nom, comme en php, pour l'utiliser -->
    <xsl:param name="day"/>
    <xsl:param name="month"/>
    <xsl:param name="year"/>
    <xsl:template match="BASE">
        <html>
            <body>
                <table>
                    <tr>
                        <th>Project ID</th>
                        <th>Title</th>
                        <th>Client</th>
                        <th>Deadline</th>
                    </tr>
                    <xsl:for-each select="./project" >
                        <!-- Un p'tit if, pense à échapper les chevrons -->
                        <xsl:if test="(deadline/year <= $year) and (deadline/month <= $month) and (deadline/day <= $day)">
                            <tr>
                                <td><xsl:value-of select=".[email protected]"/></td>
                                <td><xsl:value-of select="./title"/></td> 
                                <td><xsl:value-of select="./client"/></td> 
                                <td><xsl:value-of select="./deadline"/></td>   
                            </tr>
                        </xsl:if>
                    </xsl:for-each>
                </table>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

voilà simple et fonctionnel ;)


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 2 Messages

07 mars 2017, 12:19

Merci pour ta réponse!
Je comprends par contre pas trop où mettre le php, est-ce que je l'insère dans le fichier .xsl ?

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8685 Messages

07 mars 2017, 16:03

ben il te faut bien quelque chose pour appliquer la xsl au xml et vue que l'on est sur phpfrance je t'ai fait un exemple avec php ;)
A priori tu génère le html depuis ton html et un formulaire html à été posté avec les infos de dates dedans.
si c'est le cas mon code reflète ce que tu dois surement déjà faire pour parser le xml.

si tu utilise autre chose pour la transfo xsl c'est avec ce langage la qu'il faut que tu vois pour passer le paramètre.

bref c'est juste un exemple si tu n'en a pas besoin ce n'est pas grave la partir xsl est quand même bonne :mrgreen:

@+
Il en faut peu pour être heureux ......