Igor: Bildergalerie oder kann XSLT zählen?

Hi,

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?

mfg Fabian

  1. Hallo!

    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.

    Um solche Tabellen zu erstellen, benötigt man eine Script- oder Programmiersprache. Wenn Du zum Beispiel 21 Bilder hast, mußt Du noch in der letzten Zeile 4 leere Zellen schreiben. Wie gesagt, mit einer Script- oder Programmiersprache ist das einfach...

    Mit XSLT ist das ein ziemlicher Aufwand und bin mir gar nicht mal sicher, ob das zu realisieren ist.

    Aber wieso den eine Tabelle, wenn man das auch mit div's, die man floaten lässt, lösen kann. Ich nehme mal an das jedes Bild 100 Pixel breit ist und jedes Bild nach rechts und unten 20 Pixel Abstand hat.

    .bild {
       width:100px;
       margin: 0 20px 20px 0;
       float:left;
    }

    <div style="width:600px;">
       <div class="bild">01. Bild</div>
       <div class="bild">02. Bild</div>
       <div class="bild">03. Bild</div>
       <div class="bild">04. Bild</div>
       <div class="bild">05. Bild</div>
       <div class="bild">06. Bild</div>
       <div class="bild">07. Bild</div>
       <div class="bild">08. Bild</div>
       <div class="bild">09. Bild</div>
       <div class="bild">10. Bild</div>
       <div class="bild">11. Bild</div>
       <div class="bild">12. Bild</div>
    </div>

    So ergibt sich ein schönen 5spaltige Aufteilung.

    André Laugks

    --
    Die Frau geht, die Hilti bleibt!
    1. Hallo,

      Um solche Tabellen zu erstellen, benötigt man eine Script- oder Programmiersprache.

      Warum?

      Wenn Du zum Beispiel 21 Bilder hast, mußt Du noch in der letzten Zeile 4 leere Zellen schreiben.

      Ja genau.

      Mit XSLT ist das ein ziemlicher Aufwand und bin mir gar nicht mal sicher, ob das zu realisieren ist.

      https://forum.selfhtml.org/?t=127419&m=822611

      Grüße
      Thomas

      1. Hallo Thomas!

        Hallo,

        Um solche Tabellen zu erstellen, benötigt man eine Script- oder Programmiersprache.

        Warum?

        Das es gar nicht geht, habe ich ja nicht gesagt... ;-)

        André Laugks

        --
        Die Frau geht, die Hilti bleibt!
    2. Auch dir vielen Dank!
      werde das auch mal probieren!

  2. Hallo,

    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>

    -------------------

    <xsl:template match="galerie">
     <table border="1">
      <xsl:for-each select="bild[position() mod 5 = 1]">
       <xsl:variable name="last">
        <xsl:apply-templates select=". | following-sibling::bild[position() &lt; 5]" mode="last" />
       </xsl:variable>
       <tr>
        <xsl:apply-templates select=". | following-sibling::bild[position() &lt; 5]" />
        <xsl:if test="substring($last, 1, 1) &lt; 5">
         <xsl:call-template name="make_empty_cells">
          <xsl:with-param name="count" select="5 - substring($last, 1, 1)"/>
         </xsl:call-template>
        </xsl:if>
       </tr>
      </xsl:for-each>
     </table>
    </xsl:template>

    <xsl:template match="bild">
     <td>
      <img .... />
     </td>
    </xsl:template>

    <xsl:template match="bild" mode="last">
     <xsl:value-of select="last()" />
    </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

    1. 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

      1. Vielen Dank!

        werde es gleich mal ausprobieren!

  3. Hallo.

    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.

    "Mit einer Liste wäre das nicht passiert."
    MfG, at