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 :

[XSL-FO] creer une liste sur 2 colonnes


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [XSL-FO] creer une liste sur 2 colonnes
    Bonjour à tous,

    Vmon probleme est relativement simple mais je ne trouve aucune informations sur Internet qui pourrait m'aider.
    Je souhaite creer une liste, sur 2 colonnes.

    Sur une cela fonctionen mais ke n'arrive pas à faire sur 2 colonnes.

    Voici mon code :

    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
     <xsl:for-each select="/toto">
                   <fo:list-block>
                     <fo:list-item>
                       <fo:list-item-label end-indent="label-end()">
                         <fo:block></fo:block>
                         </fo:list-item-label>
                         <fo:list-item-body start-indent="body-start()">
                             <fo:block>
                                 <xsl:value-of select="." />
                             </fo:block>
                         </fo:list-item-body>
                     </fo:list-item>
     
                   </fo:list-block>
     
    	           </xsl:for-each>
    Voila, c'est tout simple mais je bloque depuis trop de temps.
    Est ce que quelqu'un aurai une idée?

    Merci

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Cela n'existe pas directement en xsl-fo. Tu peux répartir dans deux cellules de table. A peu près comme cela:

    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
    23
    24
    25
    26
    27
     
    //cas d'une liste OL
    <xsl:template match="OL">
     
      <xsl:variable name="moitie" select="(count(LI) + 1) div 2"/>
     
      <fo:table>
          <fo:column column-width="..."/> <!-- 1ere col -->
          <fo:column column-width="..."/> <!-- 2eme col -->
          <fo:table-body>
             <fo:table-row>
                <fo:table-cell> <!-- 1ere col -->
                   <fo:list-block>
                      <xsl:apply-templates 
                           select="LI[position() <= $moitie]"/>
                   </fo:list-block>
                </fo:table-cell>
                <fo:table-cell>  <!-- 2eme col -->
                   <fo:list-block>
                      <xsl:apply-templates 
                           select="LI[position() > $moitie]"/>
                   </fo:list-block>
                </fo:table-cell>
             </fo:table-row>
          <fo:table-body>
       </fo:table>
    </xsl:template>
    ERE

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Salut Emmanuel.

    merci beaucoup pour t'as réponse, malheureusement je n'ai pas tout compris.
    Est ce que tu pourrais m'expliquer ce qu'est : LI?

    Pareil pour :

    <xsl:apply-templates
    select="LI[position() <= $moitie]"/>


    Pas trop compris.

  4. #4
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Citation Envoyé par kiki5151 Voir le message
    Salut Emmanuel.

    merci beaucoup pour t'as réponse, malheureusement je n'ai pas tout compris.
    Est ce que tu pourrais m'expliquer ce qu'est : LI?

    Pareil pour :

    <xsl:apply-templates
    select="LI[position() <= $moitie]"/>


    Pas trop compris.
    N'ayant pas ton arborescence j'ai juste pris un exemple de liste HTML qu'il faudrait répartir sur 2 colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <OL>
    <li>element 1</li>
    <li>element 2</li>
    <li>element 3</li>
    <li>element 4</li>
    </OL>
    Je suppose que les LI correspondraient à tes TOTO.

    A toi d'adapter !

    ERE

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Points : 40
    Points
    40
    Par défaut
    J'ai sensiblement le même problème avec 3 colonnes. Ca fait 2 jours que je regarde comment fonctionne le xsl-fo et 1/2 journée que je suis sur ce problème

    Voici mon code :
    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
    23
    24
    25
    <fo:table table-layout="fixed">
      <fo:table-column column-width="2.5cm"/>
      <fo:table-column column-width="16cm"/>
      <!--fo:table-column column-width="7.5cm"/-->
      <fo:table-body>
        <fo:table-row>
          <fo:table-cell border-style="solid" border-color="white" border-width="0pt">
            <fo:block text-align="left">
       <xsl:value-of select="html:ofs-header-img"/>
       <fo:external-graphic space-before="0.0cm" width="1.85cm" height="2.05cm" src="url('http://localhost/ofssm/documents/templates/ofs_header.gif')" role="html:img"></fo:external-graphic>
      </fo:block>
          </fo:table-cell>
     
          <fo:table-cell border-style="solid" border-color="white" border-width="0pt">
           <xsl:value-of select="html:ofs-header-text-cnf"/>
           <xsl:call-template name="process-common-attributes-and-children"/>
       </fo:table-cell>
     
          <fo:table-cell border-style="solid" border-color="white" border-width="0pt">
         <xsl:value-of select="html:ofs-header-text-dpt"/>
         <xsl:call-template name="process-common-attributes-and-children"/>
       </fo:table-cell>
        </fo:table-row>     
      </fo:table-body>
    </fo:table>
    En décommentant la troisième colonne j'obtiens deux fois la deuxième cellule sur la même ligne et deux fois la troisième cellule sur une seconde ligne...
    En laissant commenter, mes deux dernières cellules apparaissent l'une en dessous de l'autre au lieu d'être à côté ...

  6. #6
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Bonjour,
    C'est peut être tes appels xsl-t qui génèrent un xsl-fo étrange.
    Je crois pas non plus que tu puisse mettre du texte directement dans une table-cell (via test xsl:value-of), il faut l'encapsuler dans un block comme tu l'as fait dans ta première cellule.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Morbo Voir le message
    Je crois pas non plus que tu puisse mettre du texte directement dans une table-cell (via test xsl:value-of), il faut l'encapsuler dans un block comme tu l'as fait dans ta première cellule.
    Si je pense que ça marche bien puisque si je met que 2 <fo:table-cell...> au lieu de 3, j'ai le résultat souhaité. Et j'ai essayé le block, mais dans ce cas là j'ai 3 fois les mêmes textes qui apparaissent (au lieu de 1 fois).

    Mais tu as sans doute raison ça doit venir des mes appels xsl-t je regarde dans ce sens.

  8. #8
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Citation Envoyé par belrifou Voir le message
    Si je pense que ça marche bien puisque si je met que 2 <fo:table-cell...> au lieu de 3, j'ai le résultat souhaité. Et j'ai essayé le block, mais dans ce cas là j'ai 3 fois les mêmes textes qui apparaissent (au lieu de 1 fois).
    C'est très étrange que le rendu diffère avec l'encapsulation d'un block comme premier fils de table-cell.

    Le pb c'est que les moteurs xsl-fo ne suivent pas tous (& de la même façon) toutes les regles définis par le W3C. Donc peut être le tien n'a pas besoin d'un block en fils de table-cell (c'était le cas pour fop 0.20 par ex).
    Mais en tout cas le w3c définit que les seuls enfant d'un noeud table-cell est de type block
    Citation Envoyé par http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-cell
    The children of each normal area returned by an fo:table-cell formatting object must be normal block-areas returned by the children of the fo:table-cell, must be properly stacked, and must be properly ordered.

Discussions similaires

  1. [SP-2010] Webpart de requêtes dans une liste sur plusieurs colonnes (dates)
    Par Eka_T dans le forum SharePoint
    Réponses: 6
    Dernier message: 09/02/2015, 15h03
  2. [AC-2007] Afficher une liste sur plusieurs colonnes
    Par Nephyline dans le forum IHM
    Réponses: 5
    Dernier message: 08/02/2012, 15h03
  3. Filtrer une liste sur les valeurs d'une colonne
    Par julien.63 dans le forum SharePoint
    Réponses: 3
    Dernier message: 13/02/2009, 08h43
  4. faire une recherche sur la colonne d'une liste annuaire
    Par gracouille dans le forum SharePoint
    Réponses: 1
    Dernier message: 13/10/2008, 17h06
  5. [ul/li] Séparer une liste sur plusieurs colonnes
    Par Wookai dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 22/06/2007, 14h01

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