Tri sur une balise #VALEUR dans une boucle DATA

Bonjour

Je reposte un message parce que l’autre est un peu loin maintenant et je n’arrive pas à trouver la solution par moi même : je cherche à trier un contenu par ordre alphabétique sur une valeur #VALEUR dans une boucle DATA : j’ai la boucle suivante :

[(#SET{c,lienversmonxml})]
<BOUCLE_xml(DATA) {source xml, #GET{c}}>
<BOUCLE_deux(DATA){source table, #VALEUR**}{datapath 0}>

[(#VALEUR{axe/0}|=={Management}|oui) /* ici je cherche les valeurs « Axe » qui ont rapport avec le Management pour ne faire afficher que ça dans ma page (il y a d’autres axes dans le fichier xml global) */

  • Intitulé : #VALEUR{intitule/0}
    Objectifs : #VALEUR{objectifs/0}
    Contenu : #VALEUR{contenu/0}
    Public : #VALEUR{public/0}
    ]
    </BOUCLE_deux>
    </BOUCLE_xml>

Pour chaque axe, j’ai plusieurs infos : l’intitulé, l’objectif, le contenu, le public, etc.
Je voudrais trier dans ma page référent à l’axe Management les formations par intitulé par ordre alphabétique sur l’intitulé (les données suivent ensuite avec Objectifs, contenus, etc.)

En gros, je voudrais sur ma page :

AXE : Management

  • Management 1
    Objectifs : blabla
    Contenus : blabla
    Public : blabla

  • Management 2
    Objectifs : blabla
    Contenus : blabla
    Public : blabla

  • Management 3
    Objectifs : blabla
    Contenus : blabla
    Public : blabla

Là actuellement, ça me l’affiche dans l’ordre du fichier xml, qui me fait afficher l’intitulé 3 avant le 2 par exemple… et c’est pas top en terme de présentation.

Comment je peux faire à votre avis ?
Merci d’avance pour votre aide, c’est un peu urgent pour moi et je tourne en rond depuis une semaine, j’ai cherché un peu partout sans succès…

Bonjour,

Dur de dépanner sans pouvoir faire des tests en vrai sur le fichier xml, j'imagine que l'absence de réponse est dû à ça.
Quelques remarques générales quand même, si ça peut te faire un peu avancer.

Alors pour ma part, avec les boucles DATA j'ai constaté que les données au format yaml sont *beaucoup* plus simples à manipuler que les fichier xml, si tu as possibilité de passer au yaml je conseille chaudement.
Par exemple, pas besoin de faire #VALEUR{toto/0}, #VALEUR{toto} suffit.
En général, ça évite également d'avoir à faire des boucles imbriquées.

Alors si tu es obligé de rester sur du xml, tu peux essayer avec des critères. Je sais que {valeur = toto} marche, pour {valeur/xx/yy = toto} je ne suis pas sûr par contre, à essayer.
Ca te permettrait de faire le classement comme tu le souhaites dans la 2ème boucle et de te passer du [(#VALEUR{axe/0}|=={Management}|ui) ...]

Exemple qui ne va sans doute pas marcher, mais pour donner une idée :
<BOUCLE_deux(DATA){source table, #VALEUR**}{datapath 0}{valeur/axe/0 = management}{par valeur/axe/0}>

Le 06/02/2013 08:51, o2 a écrit :

Bonjour

Je reposte un message parce que l'autre est un peu loin maintenant et je
n'arrive pas à trouver la solution par moi même : je cherche à trier un
contenu par ordre alphabétique sur une valeur #VALEUR dans une boucle
DATA : j'ai la boucle suivante :

[(#SET{c,lienversmonxml})]
  <BOUCLE_xml(DATA) {source xml, #GET{c}}>
                 <BOUCLE_deux(DATA){source table, #VALEUR**}{datapath 0}>

                 [(#VALEUR{axe/0}|=={Management}|oui) /* ici je
cherche les valeurs "Axe" qui ont rapport avec le Management pour ne
faire afficher que ça dans ma page (il y a d'autres axes dans le fichier
xml global) */

           - Intitulé : #VALEUR{intitule/0}
             Objectifs : #VALEUR{objectifs/0}
             Contenu :</strong> #VALEUR{contenu/0}
             Public</strong> : #VALEUR{public/0}
              ]
             </BOUCLE_deux>
</BOUCLE_xml>

Pour chaque axe, j'ai plusieurs infos : l'intitulé, l'objectif, le
contenu, le public, etc.
Je voudrais trier dans ma page référent à l'axe Management les
formations par intitulé par ordre alphabétique sur l'intitulé (les
données suivent ensuite avec Objectifs, contenus, etc.)

En gros, je voudrais sur ma page :

AXE : Management

- Management 1
Objectifs : blabla
Contenus : blabla
Public : blabla

- Management 2
Objectifs : blabla
Contenus : blabla
Public : blabla

- Management 3
Objectifs : blabla
Contenus : blabla
Public : blabla

Là actuellement, ça me l'affiche dans l'ordre du fichier xml, qui me
fait afficher l'intitulé 3 avant le 2 par exemple... et c'est pas top en
terme de présentation.

Comment je peux faire à votre avis ?
Merci d'avance pour votre aide, c'est un peu urgent pour moi et je
tourne en rond depuis une semaine, j'ai cherché un peu partout sans
succès...

Merci, je suis obligé d’être sur du xml : (et pour info, je suis sur spip 2.1.12 avec itérateurs)
le fichier xml en version raccourcie c’est ça : je cherche donc à ne faire afficher sur la page que les stages correspondant à l’Axe Management, et dans l’ordre alphabétique de l’intitulé.

<BOUCLE_deux(DATA){source table, #VALEUR**}{datapath 0}{valeur/axe/0 = management}{par valeur/axe/0}>
ca me renvoie rien du tout, j’ai une page blanche qui s’affiche…

Avec mon fichier xml, tu vois ce que je pourrais mettre comme boucle du coup ?

<?xml version="1.0" encoding="UTF-8"?> Web Formation Bureautique blablablabla Contenu Bureautique Management M01 Management de projet blablablabla Contenu RH Management M03 Pilotage Masse salariale blablablabla Contenu Pilotage Web Formation Web blablablabla Contenu Web Management M02 Gestion RH blablablabla Contenu Pilotage

Le 6 février 2013 15:36, Charles Razack <tcharlss@hotmail.fr> a écrit :

Bonjour,

Dur de dépanner sans pouvoir faire des tests en vrai sur le fichier xml, j’imagine que l’absence de réponse est dû à ça.
Quelques remarques générales quand même, si ça peut te faire un peu avancer.

Alors pour ma part, avec les boucles DATA j’ai constaté que les données au format yaml sont beaucoup plus simples à manipuler que les fichier xml, si tu as possibilité de passer au yaml je conseille chaudement.
Par exemple, pas besoin de faire #VALEUR{toto/0}, #VALEUR{toto} suffit.
En général, ça évite également d’avoir à faire des boucles imbriquées.

Alors si tu es obligé de rester sur du xml, tu peux essayer avec des critères. Je sais que {valeur = toto} marche, pour {valeur/xx/yy = toto} je ne suis pas sûr par contre, à essayer.
Ca te permettrait de faire le classement comme tu le souhaites dans la 2ème boucle et de te passer du [(#VALEUR{axe/0}|=={Management}|ui) …]

Exemple qui ne va sans doute pas marcher, mais pour donner une idée :
<BOUCLE_deux(DATA){source table, #VALEUR**}{datapath 0}{valeur/axe/0 = management}{par valeur/axe/0}>

Le 06/02/2013 08:51, o2 a écrit :

Bonjour

Je reposte un message parce que l’autre est un peu loin maintenant et je
n’arrive pas à trouver la solution par moi même : je cherche à trier un
contenu par ordre alphabétique sur une valeur #VALEUR dans une boucle
DATA : j’ai la boucle suivante :

[(#SET{c,lienversmonxml})]
<BOUCLE_xml(DATA) {source xml, #GET{c}}>
<BOUCLE_deux(DATA){source table, #VALEUR**}{datapath 0}>

[(#VALEUR{axe/0}|=={Management}|oui) /* ici je
cherche les valeurs « Axe » qui ont rapport avec le Management pour ne
faire afficher que ça dans ma page (il y a d’autres axes dans le fichier
xml global) */

  • Intitulé : #VALEUR{intitule/0}
    Objectifs : #VALEUR{objectifs/0}
    Contenu : #VALEUR{contenu/0}
    Public : #VALEUR{public/0}
    ]
    </BOUCLE_deux>
    </BOUCLE_xml>

Pour chaque axe, j’ai plusieurs infos : l’intitulé, l’objectif, le
contenu, le public, etc.
Je voudrais trier dans ma page référent à l’axe Management les
formations par intitulé par ordre alphabétique sur l’intitulé (les
données suivent ensuite avec Objectifs, contenus, etc.)

En gros, je voudrais sur ma page :

AXE : Management

  • Management 1
    Objectifs : blabla
    Contenus : blabla
    Public : blabla

  • Management 2
    Objectifs : blabla
    Contenus : blabla
    Public : blabla

  • Management 3
    Objectifs : blabla
    Contenus : blabla
    Public : blabla

Là actuellement, ça me l’affiche dans l’ordre du fichier xml, qui me
fait afficher l’intitulé 3 avant le 2 par exemple… et c’est pas top en
terme de présentation.

Comment je peux faire à votre avis ?
Merci d’avance pour votre aide, c’est un peu urgent pour moi et je
tourne en rond depuis une semaine, j’ai cherché un peu partout sans
succès…


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
http://archives.rezo.net/spip.mbox/

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

Je vais jeter un coup d'oeil, on va voir ce que ça donne.

Le 06/02/2013 16:02, o2 a écrit :

Merci, je suis obligé d'être sur du xml : (et pour info, je suis sur
spip 2.1.12 avec itérateurs)
le fichier xml en version raccourcie c'est ça : je cherche donc à ne
faire afficher sur la page que les stages correspondant à l'Axe
Management, et dans l'ordre alphabétique de l'intitulé.

<BOUCLE_deux(DATA){source table, #VALEUR**}{datapath 0}{valeur/axe/0 =
management}{par valeur/axe/0}>
ca me renvoie rien du tout, j'ai une page blanche qui s'affiche...

Avec mon fichier xml, tu vois ce que je pourrais mettre comme boucle du
coup ?

<?xml version="1.0" encoding="UTF-8"?>

<programme>
<stage>
<axe>Web</axe>
<intitule>Formation Bureautique</intitule>
<objectifs>blablablabla</objectifs>
<contenu>Contenu Bureautique</contenu>
</stage>

<stage>
<axe>Management</axe>
<intitule>M01 Management de projet</intitule>
<objectifs>blablablabla</objectifs>
<contenu>Contenu RH</contenu>
</stage>

<stage>
<axe>Management</axe>
<intitule>M03 Pilotage Masse salariale</intitule>
<objectifs>blablablabla</objectifs>
<contenu>Contenu Pilotage</contenu>
</stage>

<stage>
<axe>Web</axe>
<intitule>Formation Web</intitule>
<objectifs>blablablabla</objectifs>
<contenu>Contenu Web</contenu>
</stage>

<stage>
<axe>Management</axe>
<intitule>M02 Gestion RH</intitule>
<objectifs>blablablabla</objectifs>
<contenu>Contenu Pilotage</contenu>
</stage>

</programme>

merci merci :wink: je continue de chercher aussi avec tes pistes sur les critères

Le 6 février 2013 16:10, Charles Razack <tcharlss@hotmail.fr> a écrit :

Je vais jeter un coup d’oeil, on va voir ce que ça donne.

Le 06/02/2013 16:02, o2 a écrit :

Merci, je suis obligé d’être sur du xml : (et pour info, je suis sur
spip 2.1.12 avec itérateurs)
le fichier xml en version raccourcie c’est ça : je cherche donc à ne
faire afficher sur la page que les stages correspondant à l’Axe
Management, et dans l’ordre alphabétique de l’intitulé.

<BOUCLE_deux(DATA){source table, #VALEUR**}{datapath 0}{valeur/axe/0 =
management}{par valeur/axe/0}>
ca me renvoie rien du tout, j’ai une page blanche qui s’affiche…

Avec mon fichier xml, tu vois ce que je pourrais mettre comme boucle du
coup ?

<?xml version="1.0" encoding="UTF-8"?> Web Formation Bureautique blablablabla Contenu Bureautique Management M01 Management de projet blablablabla Contenu RH Management M03 Pilotage Masse salariale blablablabla Contenu Pilotage Web Formation Web blablablabla Contenu Web Management M02 Gestion RH blablablabla Contenu Pilotage

liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
http://archives.rezo.net/spip.mbox/

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

On peut aussi essayer de faire l’inverse peut-être, cad trier par ordre alpha puis ne garder que l’axe qui nous intéresse ? :
on sait classer par valeur :

[(#SET{c,fichier.xml})]
Stage :

<BOUCLE_test2(DATA) {source xml, #GET{c}}{par valeur}>

  • Axe : #VALEUR{0/axe/0}

    Intitule : #VALEUR{0/intitule/0}

    Contenu : #VALEUR{0/contenu/0}

    </BOUCLE_test2>

Ca me classe les stages par valeur par ordre alphabétique d’abord sur l’axe puis sur l’intitulé :
avec mon fichier xml, ça donnerait à l’affichage sur la page ceci :

  • Axe : Management
    Intitule : M01 Management de projet
    Contenu : Contenu RH

  • Axe : Management
    Intitule : M02 Gestion RH
    Contenu : Contenu Pilotage

  • Axe : Management
    Intitule : M03 Pilotage Masse salariale
    Contenu : Contenu Pilotage

  • Axe : Web
    Intitule : Formation Bureautique
    Contenu : Contenu Bureautique

  • Axe : Web
    Intitule : Formation Web
    Contenu : Contenu Web

Il faudrait que je ne garde que les axes liés à Management par exemple, que ce soit juste le titre de la page
et qu’on ait par exemple :
AXE : Management

Intitule : M01 Management de projet
Contenu : Contenu RH

Intitule : M02 Gestion RH
Contenu : Contenu Pilotage

Intitule : M03 Pilotage Masse salariale
Contenu : Contenu Pilotage

Le 6 février 2013 16:15, o2 <webmaster.spip@gmail.com> a écrit :

merci merci :wink: je continue de chercher aussi avec tes pistes sur les critères

Le 6 février 2013 16:10, Charles Razack <tcharlss@hotmail.fr> a écrit :

Je vais jeter un coup d’oeil, on va voir ce que ça donne.

Le 06/02/2013 16:02, o2 a écrit :

Merci, je suis obligé d’être sur du xml : (et pour info, je suis sur
spip 2.1.12 avec itérateurs)
le fichier xml en version raccourcie c’est ça : je cherche donc à ne
faire afficher sur la page que les stages correspondant à l’Axe
Management, et dans l’ordre alphabétique de l’intitulé.

<BOUCLE_deux(DATA){source table, #VALEUR**}{datapath 0}{valeur/axe/0 =
management}{par valeur/axe/0}>
ca me renvoie rien du tout, j’ai une page blanche qui s’affiche…

Avec mon fichier xml, tu vois ce que je pourrais mettre comme boucle du
coup ?

<?xml version="1.0" encoding="UTF-8"?> Web Formation Bureautique blablablabla Contenu Bureautique Management M01 Management de projet blablablabla Contenu RH Management M03 Pilotage Masse salariale blablablabla Contenu Pilotage Web Formation Web blablablabla Contenu Web Management M02 Gestion RH blablablabla Contenu Pilotage

liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
http://archives.rezo.net/spip.mbox/

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

De mon côté, j'ai la solution suivante qui se fait en 2 temps :

1 - On place les données xml dans un tableau "propre"
     le tableau est de la sorte : intitule => (contenu=>xxx, objectifs=>yyy)

2 - On utilise ce tableau pour l'affichage et le tri des données.
     Du coup on peut se servir de la cle pour faire un tri {par cle} (donc par intitulé)

Ce qui donne :

[(#REM) Boucle créant un tableau ]
#SET{management, #ARRAY}
<BOUCLE_xml(DATA){source xml, #CHEMIN{squelettes/essai.xml}}>
[(#VALEUR{0/axe/0}|=={Management}|oui)
#SET{management, #GET{management}|array_merge{
  #ARRAY{
    #VALEUR{0/intitule/0}, #ARRAY{
      contenu,#VALEUR{0/contenu/0},
      objectifs,#VALEUR{0/objectifs/0}
      }
    }
  }
}
]
</BOUCLE_xml>

[(#REM) affichage des données ]
<dl>
<BOUCLE_management(DATA){source table, #GET{management}}{par cle}>
<dt>#CLE</dt>
<dd><strong>contenu</strong> : #VALEUR{contenu}</dd>
<dd><strong>objectifs</strong> : #VALEUR{objectifs}</dd>
</BOUCLE_management>
</dl>

Au final, ça donne :

M01 Management de projet
    contenu : Contenu RH
    objectifs : blablablabla
M02 Gestion RH
    contenu : Contenu Pilotage
    objectifs : blablablabla
M03 Pilotage Masse salariale
    contenu : Contenu Pilotage
    objectifs : blablablabla

C'est bien ce qui était recherché ?

Bonjour

En fait, c’est passé tout simplement avec [(#VALEUR{XXX}|nl2br)]
Si ça peut aider d’autres personnes !

Merci !

Le 8 février 2013 16:44, Charles Razack <tcharlss@hotmail.fr> a écrit :

Ah pour les sauts de ligne, je ne suis pas sûr. Peut-être que le filtre |typo n’est pas appliqué, tu peux essayer [(#VALEUR|typo)] voir si ça résout le problème.
Sinon il y a l’option bourrin : [(#VALEUR|replace{’ ', ‹ 
 ›})]

Le jeu. 07 févr. 2013 10:57:56 CET, o2 a écrit :

Une dernière question, si jamais tu sais : Dans le texte d’un champ
Texte avec des sauts de lignes par exemple, dans le
fichier xml puis sur l’affichage dans spip, je n’ai pas les sauts de
ligne automatiquement pris en compte. Le texte se déroule à la suite,
sans prendre en compte les sauts de ligne.
Comment on remplace les caractères de fin de ligne ( ) en

dans le champ contenu dans ce cas ? Comment intégrer la fonction nl2br
en gros …