Boucle for(i=0;i<var;i++) en XSL... ? - XML/XSL - Programmation
Marsh Posté le 27-01-2005 à 11:31:48
Quelle aide?
avec l'XML suivant :
<queue>
<numberOfPage>10</numberOfPage>
</queue>
<xsl:for-each select="queue/numberOfPage">
<xsl:value-of select="position()"/>
</xsl>
ca va me faire
012345678910
Je trouve ca étrange....
Marsh Posté le 27-01-2005 à 11:31:57
gedeon a écrit : Oui avec -each au bout |
Du calme gedeon, du calme.
"for-each", c'est pour boucler sur les items d'un ensemble.
Et c'est pas ce que demande paquerette !
paquerette veux générer des données à partir de rien (ou presque), ce pour quoi XSLT n'est pas du tout fait.
Mais on peut s'en sortir
Avec la récursivité des templates :
On veut donc par exemple générer x fois le code : '<a href="page.php?num=n" class="page_num"> n </a>' ou 'n' va de N à N'.
On fait donc un template qui prend des paramètres en entrée :
Code :
|
Pour appeler le template pour générer les numéros de pages de 15 à 30 :
Code :
|
Et, ça, je ne suis pas sûr que se soit dans l'aide...
[Edit] Correction de quelques bugs...
Marsh Posté le 27-01-2005 à 11:38:35
Je me disais bien aussi.... ca aurait été trop simple !
Merci Mara's dad
Marsh Posté le 27-01-2005 à 11:42:38
le < de <xsl:if test="$num < $total"> c'est voulu ou c'est le forum?
Je vais essayer d'ajouter a ca, un fenetrage pour n'afficher que les 9 pages autours de la page courante...
Marsh Posté le 27-01-2005 à 11:51:33
Oui, c'est voulu !
'<' en xml, c'est mal vu
Marsh Posté le 27-01-2005 à 12:18:59
il manquait des / sur les value-of dans le lien
Code :
|
Marsh Posté le 27-01-2005 à 12:23:46
Ok , c'etatit quoi la question ?
y'a pas de truc genre <xsl:for ?
Ma reponse est bonne !! non ?
(avec une peu de mauvaise foi)
Bref sinon tu peux nous donner un petit exemple de code xml que tu as à traiter, j'aimerai verifier un truc
Marsh Posté le 27-01-2005 à 12:41:19
paquerette a écrit : il manquait des / sur les value-of dans le lien |
Ok, je corrige pour la postérité
Marsh Posté le 27-01-2005 à 14:43:06
Ben la qestion elle est marquée et le code de Mara's dad fonctionne très bien...
Je posterais une version avec la gestion d'une fenetre glissante pour l'affichage des liens genre :
1 2 ... 7 8 9 10 11 ... 24 25
Marsh Posté le 28-01-2005 à 17:10:39
Voila le XSL qui permet a partir de 3 chiffre de genéner les liens de pagination :
<< 1, 2, 3, ... 9, 10, [11], 12, 13, ... 25, 26, 27 >>
à partir de 3 infos :
Page courante,
Nombre de page,
Taille de la fenetre glissante (nombre de liens a afficher autour de la page courante, de la premiere et derniere page)
le XSL est constitué de 2 templates (l'une récursive qui boucle sur les n° de page et l'autre qui affiche les liens << >> et appel le template récursif)
Les choses a modifier : La facon dont les liens sont fait.
Dans mon environnement de dev, j'ai besoin de faire des onclick()... donc c'est des onclick...
Et il faut 2 images, changer les liens.
Merci à Mara's dad pour le script original...
Pour ma part, je me suis bien pris la tete pour afficher les '...' une fois.
La template à appeler :
Code :
|
La template Récursive :
Code :
|
CSS :
Code :
|
Marsh Posté le 28-01-2005 à 17:22:44
J'avais commencé de résoudre le pb des ..., mais j'ai vite arrêté parcequ'on peux voir la chose de plusieurs manières et que je ne savais pas ce qui te conviendrais.
En tout cas, c'est un truc à garder bien au chaud !
Marsh Posté le 28-01-2005 à 17:33:11
Ce qui est corriace c'est qu'on est dans un appel récursif et qu'en XSL visiblement une fois qu'on a déclarer une variable on peut pas la modifier...
Du coup, je passe 2 parametres qui me disent si j'ai déja afficher les '...' et comme c des boolean j'arrive a m'en sortir...
Sinon autre truc chiant en XSL c'est que y'a pas de else... du coup si on veut vraiment un else sur une condition composer (genre a && b && c || d && e && f)...
parce que
if(a && b && c || d && e && f)
a();
else
b();
n'est pas équivalent a
if(a && b && c )
a();
if(!(a && b && c))
b();
Sinon, j'aurais pu modifier mon XML à la voler... mais je trouvais ca pas très propre de metre un truc genre dans le XML alors que finalement on a toute l'info qui faut avec 2 entier...:
<pagination>
<value>1</value>
<value>2</value>
<value>...</value>
<value>4</value>
<value selected="true">5</value>
<value>6</value>
<value>7</value>
</pagination>
et puis ca m'a amusé
Marsh Posté le 28-01-2005 à 17:44:29
Démo avec un fichier XML contenant la feuille XSL : http://www.surleau.com/hfr/pagination.xml
PS : J'ai remplacé les images par << et >>
PS2 : Pour ceux qui utilient autre choose qu'IE bien sûr...
Marsh Posté le 28-01-2005 à 17:47:20
cool
En ce moment, je bosse dans un boite ou je suis derrière un #$£* de proxy : pas de SSH, pas de ftp, pas de pop , du coup, je peux pas faire ce genre de truc...
Marsh Posté le 28-01-2005 à 17:47:43
Y'a pas de else, mais y'a :
Code :
|
Du coup le xsl:otherwise peut servir de else
Marsh Posté le 27-01-2005 à 10:38:13
Salut,
Dans un XML j'ai une description de pagination:
Nombre de pages, nombre d'item par page, nombre total de résultat, page en cours...
J'aimerais générer le HTML pour les N° de page et pour ca j'ai besoin de boucler sur mon nombre de page...
Comment est ce que je fait ca en XSL?
y'a pas de truc genre <xsl:for ?
Paquerette