Toon posts:

[XSLT] Items weergeven in groepen van vier.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

Ik wil graag voor mijn site een overzicht maken van categorieen. Deze categorieen moeten in een tabel staan van 4 kollomen:
code:
1
2
3
4
5
+-------+-------+-------+-------+
| cat 1 | cat 2 | cat 3 | cat 4 |
+-------+-------+-------+-------+
| cat 5 | cat 6 | cat 7 | cat 8 |
+-------+-------+-------+-------+

Mijn XML document heeft de volgende opbouw:
code:
1
2
3
4
5
6
7
8
<Categorieen>
    <Categorie Id="n">
        <Titel>De Titel</Titel>
        <Foto>URL naar foto</Foto>
        <Tekst>De Tekst</Tekst>
    </Categorie>
    ...
</Categorieen>

Mijn xsl-bestand:
code:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" indent="yes" encoding="utf-8"/>

    <xsl:template match="WebshopInstance">
    <HTML>
    <HEAD>
        <TITLE>
            <xsl:value-of select="Titel"/>
        </TITLE>
        <LINK REL="stylesheet" TYPE="text/css" HREF="../style.css"/>
    </HEAD>
    <BODY>
        <DIV CLASS="Titel" ALIGN="center">
            <xsl:value-of select="Titel"/>
        </DIV>
        <xsl:copy-of select="Tekst"/>
        
                    
        <xsl:apply-templates select="Categorieen"/>
                
    </BODY>
    </HTML>
    </xsl:template>

    <xsl:template match="Categorieen"> 
            <TABLE>  
             <TR>
              <xsl:for-each select="Categorie">
                    
                <xsl:if test="(position() + 1) mod 4 = 0"> 
                    <!-- Ik weet het dit kan niet, weet iemand hoe het wel moet? -->
                    </TR><TR>
                </xsl:if> 
                    
                    
                <TD>                   
                    <xsl:value-of select="Titel"/>
                  </TD>
            </xsl:for-each> 
            </TR>
         </TABLE> 
    </xsl:template>

</xsl:stylesheet>

Ik heb van alles geprobeert maar in mijn stylesheet klopt nergens meer iets van. Iemand een idee hoe ik dit moet oplossen?

Al vast bedankt!

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Op vrijdag 25 januari 2002 12:08 schreef mbravenboer het volgende:
Shit.... grouping....

Dit is allemaal wel mogelijk, maar wordt ontzettend veel gefriemel met positions. Je kunt voor inspiratie dit topic eens heel goed bestuderen. Bedenk eens hoe je het aan zou kunnen pakken, daarna kan ik je eventueel wel helpen (maar wil je liever zelf dit soort dingen uit laten vogelen ;) ).

[topic=289102/1/25]
(schrik niet: creepy stuff ;) )

Verwijderd

d'r is nog een topic over geweest, ik zou alleen niet meer weten hoe die terug te vinden is ;(. Maar het antwoord stond daar in ieder geval in, heb het zelf nog gebruikt :).

Ik zal 's kijken of ik iets terug kan vinden... ik bedoelde ook bovenstaande post :).

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
grouping blijft kut in XSLT.. In versie 2 word het aardig aangepakt dacht ik, dus dat is mooi :)

  • TheMrH
  • Registratie: April 2000
  • Laatst online: 01-09 22:45
Dit lijkt me redelijk makkelijk. Gewoon controleren op position() mod 4. Is deze 0 dan nieuwe row beginnen. Koekje toch?

The box said 'requires Windows 95 or better', so I installed Linux...


  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Op maandag 01 april 2002 21:54 schreef TheMrH het volgende:
Dit lijkt me redelijk makkelijk. Gewoon controleren op position() mod 4. Is deze 0 dan nieuwe row beginnen. Koekje toch?
ja, en je xsl xml-compliant houden?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
vage recursieve methode (niet getest) :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!-- dit zet je dus tussen je table -->
<xsl:call-template name="blaat">
  <xsl:with-param name="x">1</xsl:with-param>
</xsl:call-template>
<!-- ... -->

<xsl:template name="blaat">
  <xsl:param name="x"/>
  
  <xsl:if test="Categorie[position() div 4 &lt; $x]">
    <tr>
    <xsl:apply-templates select="Categorie[position() div 4 &lt; $x]"/>
    </tr>
    <xsl:call-template name="blaat">
    <xsl:with-param name="x" select="$x + 1"/>
    </xsl:call-template>
  </xsl:if>
</xsl:template>

<xsl:template select="Categorie">
  <td>
    <xsl:value-of select="."/>
  </td>
</xsl:template>

:)
Pagina: 1