28172 sujets

CSS et mise en forme, CSS3

Bonjour
Voila j'ai un flux XML de plusieurs lignes que je transforme avec XSLT pour le web et l'impression jusque là ça marche parfaitement bien mais le problème et que j'ai quelques éléments (élément parent et ses fils) qui peuvent se tenir sur plusieurs pages à l'impression et que moi je veux répéter comme titre sur chaque page l'élément parent(question de dire que ces éléments leurs parent et ça titre) voilà un peu mon code:

<div style="brd">
<table class="tabLin" align="center">
<thead>
<tr style=" color:#FFFFFF;">
<td class="celLinl" width="30%">
<b>Maison</b>
</td>
<td class="celLinl" width="20%">
<b>Articles</b>
</td>
<td class="celLinl" width="20%">
<b>Description</b>
</td>
<td class="celLinl" width="20%">
<b>id_article</b>
</td>
<td class="celLinl" width="10%">
<b>Qte</b>
</td>
</tr>
</thead>
<xsl:for-each select="g007/g008">
<xsl:variable name="NC" select="."/>
<xsl:for-each select="cmp01/e01_3[generate-id() = generate-id(key('e01_3', .)">

<tr height="20" style="tr_color" >
<td style="border-top:1px solid #000000;" class="celLintab">
<!-- Nom -->
<xsl:value-of select="NM/e01_3"/>
</td>
<td style= class="celLintab"/>
<td style= class="celLintab"/>
<td style= class="celLintab"/>
<td style= class="celLintab"/>
</tr>
<xsl:for-each select="//g007">
<xsl:if test="$magasin = g8/cmp01/e01_3">
<tr bgcolor="#FFFFFF" height="20">
<td class="celLintab">
</td>
<td class="celLintab">
<xsl:value-of select="cmp01[e01_7='F']/e04_7"/>
</td>
<td class="celLintab">
<xsl:value-of select="cmp01[e02_7 = 'EN']/e01_7"/>
</td>
<td class="celLintab">
<xsl:value-of select="cmp01[e01_6= '21']/e02_6"/>
</td>
<td class="celLintab">
<xsl:variable name="QT" select="cmp01[e01_6 = '21']/e02_6"/>
<xsl:variable name="PBL" select="cmp01[e01_6 = '59']/e02_6"/>
<xsl:value-of select="$QT div $PBL"/>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</table>

Comment faire pour répéter le Nom(titre) sur toutes les pages des ses enfants?

Merci pour votre aide.
Modifié par a_dib (14 Dec 2008 - 20:14)
Hello a_dib et bienvenue Smiley smile ,

En tant que modérateur, je me dois de te faire remarquer que tu n'as malheureusement pas respecté l'une des Règles de base du forum qui est d'afficher les codes et exemples proprement à l'aide des boutons [ code]... ici ton code HTML, CSS, PHP, etc.[ /code] (sans espace après le crochet ouvrant).

upload/1-code.gif

Je te remercie par avance de bien vouloir éditer ton message afin de le rendre conforme à cette règle. Smiley cligne

D'ailleurs, je rappelle que le lien qui apparaît en bandeau tout en haut du forum ("Nouveau sur le forum ?...") est important. Il contient des pistes de recherche, des indications sur les règles de vie de la communauté, etc.
Il serait donc courtois de ta part de bien vouloir en prendre connaissance.

Bonne continuation Smiley smile
Modifié par Heyoan (14 Dec 2008 - 10:28)
Bonjour,

C'est du CSS ou du XSL-FO? En CSS, la répétition sur toutes les pages se fait avec position:fixed (pour peu que le navigateur supporte le positionnement fixe, y compris pour le média print). en XSL-FO, eh bien déjà ça concerne un autre salon, et ensuite... aucune idée de comment faire.
Je reçois du XML et je transforme en Html via XSLT .
Concernant XSL:FO c'est pour plustard pas pour tout de suite et si t'a des liens des cours je suis interessé.

Merci d'avance.
Modifié par a_dib (15 Dec 2008 - 16:39)
a_dib a écrit :
Je reçois du XML et je transforme en Html via XSLT .

Ok, donc ce que tu imprimes c'est du HTML? Dans ce cas, le code XML que tu donnes ne va pas nous être utile.
Et donc, comme je le disais, en CSS la répétition d'un élément sur toutes les pages ça se fait avec position: fixed. Ou éventuellement, pour un tableau, en utilisant les éléments THEAD et TFOOT en HTML. Attention cependant au support de tout ceci par les navigateurs, qui peut être plus que partiel.

PS: et merci de prendre en compte le message d'Heyoan.
Modifié par Florent V. (15 Dec 2008 - 18:28)
Merci pour la participation mais je pense que j'ai mal posé le problème je m'explique :
Dans le flux que je reçois la taille moyenne est de qlq milliers de lignes(> 40 000 lignes), après pour le répétition sur chaque page de l'entête(entête du tableau )et du pied de page sa marche très bien mais comme tu l'a constaté sur mon code, il y'a deux boucles (une pour les éléments parent et une autre pour les élément fils) et dans le cas ou un élément parent possède exemple 5000 fils pour l'impression il se tiendra sur 7 pages donc moi je veux répéter sur chaqu'une cet élément parent comme un deuxième entête évidement sur ses pages j'ai déjà l'entête du tableau .
Et tout ça d'une manière dynamique ?
Modifié par a_dib (15 Dec 2008 - 20:25)
DONC, si j'ai bien compris (et tu m'arrêtes si c'est pas ça), tu as:

1. Plein de données en XML.
2. Que tu transformes en HTML.
3. Que tu proposes à l'impression d'une manière ou une autre, via une feuille feuille de styles CSS pour le média print.

Et donc avec cette configuration tu cherches un moyen de répéter un contenu qui n'est pas un en-tête de tableau sur un certain nombre de pages, en sachant que ce nombre de pages ne correspond pas forcément (voire jamais) à la totalité des pages à imprimer.

J'ai bon?

Auquel cas: ça ne peut pas se gérer uniquement en CSS, sauf éventuellement avec des outils de génération de PDF tels que Prince XML (payant, relativement cher), qui utilisent des extensions propriétaires de CSS.

Pour rappel: XML n'est pas un format adapté pour l'impression. On devra généralement:
1. pour des choses simples, générer des pages HTML que l'on proposera à l'impression (via un lien ou bouton JavaScript), et que l'on pourra laisser telles quelles ou styler en CSS (media print);
2. pour des choses plus compliquées, il faudra générer des documents PDF, que ce soit via XSL-FO (ou des librairies côté serveur qui l'utilisent) ou via un outil utilisant CSS de manière avancée et avec un meilleur support que ce que proposent les navigateurs (ex: Prince XML).