Thomas J.S.: Bildergalerie oder kann XSLT zählen?

Beitrag lesen

Nochmal,

ich versuche gerade per XSLT eine Bildergalerie zu realisern. Die thumbnails sollen also in einer Tabelle mit zb. 5 Spalten angeordnet werden - mir ist nur gerade völlig unklar, wie ich nach genau 5 Bildern eine neue Zeile beginne.

Kann mir wer weiterhelfen?

Sagen wir, das XML sieht in etwas so aus:

<galerie>
  <bild ... ></bild>
  <bild ... ></bild>
  <bild ... ></bild>
  ...
</galerie>


Blöd wie ich bin ...

Es geht ja auch einfacher!:
---------------
<xsl:template match="galerie">
 <table border="1">
  <xsl:for-each select="bild[position() mod 5 = 1]">
   <tr>
    <xsl:apply-templates select=". | following-sibling::ALBUM[position() &lt; 5]" />
   </tr>
  </xsl:for-each>
 </table>
</xsl:template>

<xsl:template match="bild">
 <td>
  <xsl:if test="(position() = last()) and (last() &lt; 5)">
   <xsl:attribute name="colspan">
    <xsl:value-of select="6 - last()" />
   </xsl:attribute>
  </xsl:if>
  <img ... />
 </td>
</xsl:template>
------------------------

oder wenn du tatsächlich leere Zellen (td) schreiben willst:

------------------------
<xsl:template match="galerie">
 <table border="1">
  <xsl:for-each select="bild[position() mod 5 = 1]">
   <tr>
    <xsl:apply-templates select=". | following-sibling::bild[position() &lt; 5]" />
   </tr>
  </xsl:for-each>
 </table>
</xsl:template>

<xsl:template match="bild">
 <td>
  <img ... />
 </td>
 <xsl:if test="(position() = last()) and (last() &lt; 5)">
  <xsl:call-template name="make_empty_cells">
   <xsl:with-param name="count" select="5 - last()"/>
  </xsl:call-template>
 </xsl:if>
</xsl:template>

<xsl:template name="make_empty_cells">
 <xsl:param name="count"/>
 <xsl:if test="$count != 0">
  <td>&#160;</td>
  <xsl:call-template name="make_empty_cells">
   <xsl:with-param name="count" select="$count - 1"/>
  </xsl:call-template>
 </xsl:if>
</xsl:template>
----------------------

Grüße
Thomas