p3l3: mehrspaltige Tabellen generieren

Hi,

ich bin grad auf der Suche nach ner Lösung um mmehrspaltige Tabellen zu generieren.

d.h.:

Ich lese einen kompletten Ordner ein (while-Schleife mit "readdir()" usw) und speichere die Dateinamen aller Bilder aus diesem Ordner in einer Variable. In der while-Schleife generiere ich momentan noch eine einspaltige Tabelle, in der jedes Bild als Thumbnail in einer neuen Zeile angezeigt wird.

Nun will ich aber eine Tabelle mit 3 Spalten generieren die also das
1. Bild in Spalte 1 / Zeile 1
2. Bild in Spalte 2 / Zeile 1
3. Bild in Spalte 3 / Zeile 1
4. Bild in Spalte 1 / Zeile 2
5. Bild in Spalte 2 / Zeile 2
6. Bild in Spalte 3 / Zeile 2
.
.
.
usw.

anzeigt.

Brauch ich dazu 3 Schleifen oder wie kann man das lösen?

LG

Peter

  1. hi,

    Brauch ich dazu 3 Schleifen oder wie kann man das lösen?

    Lass einen Zähler mitlaufen, an hand dessen du erkennst, bei welhcer Spalte du aktuell bist, und ob es nötig ist eine neue Zeile aufzumachen bzw. die aktuelle abzuschließen.

    Pseudocode:

    $zaehler = 0;
    schleife( ... ) {
      $zaehler++;
      if($zaehler == 1) {
         // neues TR aufmachen
         // ...
      }

    // TD ausgeben
      // ...

    if($zaehler == 3) {
         // TR wieder schließen
         // ...
         $zaehler = 0;
      }
    }

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Lass einen Zähler mitlaufen, an hand dessen du erkennst, bei welhcer Spalte du aktuell bist, und ob es nötig ist eine neue Zeile aufzumachen bzw. die aktuelle abzuschließen.

      Ein Zähler läuft eh schon mit

      if($zaehler == 1) {

      Versteh ich noch nicht so ganz. Der Zähler wird ja als 0 deklariert und jedesmal wenn er ne Datei findet um 1 erhöht. Also ist $zaehler nur einmal wirklich 1 und einmal wirklich 3. Das muss doch dann auch dynamisch erhöht werden, oder?

      1. hi,

        if($zaehler == 1) {

        Versteh ich noch nicht so ganz. Der Zähler wird ja als 0 deklariert und jedesmal wenn er ne Datei findet um 1 erhöht. Also ist $zaehler nur einmal wirklich 1 und einmal wirklich 3.

        Nein, da ich mit

        $zaehler = 0;

        ihn ja zurücksetze, wenn er den Wert 3 erreicht und ich daraufhin das TR geschlossen habe.

        Btw: Um das "Auffüllen" der letzten Zeile mit den "fehlenden" TD sowie das Abschließen der TR auch in diesem Falle, falls die Anzahl nicht durch 3 teilbar ist, solltest du dich natürlich auch noch kümmern.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Btw: Um das "Auffüllen" der letzten Zeile mit den "fehlenden" TD sowie das Abschließen der TR auch in diesem Falle, falls die Anzahl nicht durch 3 teilbar ist, solltest du dich natürlich auch noch kümmern.

          Das versteht sich ja von selbst. Werd mal ein wenig probieren.

          Trotzdem schon mal Danke für die Hilfestellung

          LG

          Peter

  2. Moin,

    Nun will ich aber eine Tabelle mit 3 Spalten generieren die also das

    1. Bild in Spalte 1 / Zeile 1
    2. Bild in Spalte 2 / Zeile 1
    3. Bild in Spalte 3 / Zeile 1
    4. Bild in Spalte 1 / Zeile 2
    5. Bild in Spalte 2 / Zeile 2
    6. Bild in Spalte 3 / Zeile 2
      .
      .
      .
      usw.

    ich gehe davon aus, dass deine Variable ein Array ist, also würde ich spontan sagen, nimm eine for-Scheife statt while.
    So ungefähr würde das dann aussehen.
    for($i=0$i<sizeof($var);$i+=3){
     echo '<td>'.$var[$i].'</td><td>'.$var[$i+1].'</td><td>'.$var[$i+2].'</td>';
    }

    1. ich gehe davon aus, dass deine Variable ein Array ist, also würde ich spontan sagen, nimm eine for-Scheife statt while.

      nein ist es nicht. schaut so aus

      $i=0;
      $dir = '../../images/pics/'.$jahr.'/'.$category.'/';
      $verz = opendir ($dir);
      while ($file = readdir($verz))
      {
       if ($file != "." && $file != "..")
       {
        $i++;
        <td... usw

  3. Achtung: "quick'n dirty" und ungetestet ;)

    $i=0;
    $dir = '../../images/pics/'.$jahr.'/'.$category.'/';
    $verz = opendir ($dir);

    $fileFound = true;

    echo "<table>";
    while($fileFound) {
        echo "<tr>";
        for($i = 0; i <= 3; i++)
        {
            echo "<td>";
            if($file = readdir($verz))
            {
                if ($file != "." && $file != "..")
                    echo "<img src="" . $file . "">";
                else
                    $fileFound = false;
            }
            echo "</td>";
        }
        echo "</tr>";
    }
    echo "</table>";

    1. echo $begrüßung;

      Achtung: "quick'n dirty" und ungetestet ;)

      Genauso sieht es auch aus.

      $i=0;
      $dir = '../../images/pics/'.$jahr.'/'.$category.'/';
      $verz = opendir ($dir);

      $fileFound = true;

      echo "<table>";
      while($fileFound) {

      Selbst wenn es keine darzustellenden Inhalte gibt, wird eine Tabelle erzeugt, die eine Zeile mit vier leeren Spalten (wenn der Schleifenkörper nicht noch anderweitig grob falsch wäre). Das empfinde ich als überflüssig.

      echo "<tr>";
          for($i = 0; i <= 3; i++)

      Neben den vergessenen $-Zeichen läuft deine Schleife jedes Mal 4 Runden: 0,1,2,3
      Das Anliegen, durch diese for-Schleife immer 3 (4) Spalten darzustellen, ist erstmal begrüßenswert ...

      {
              echo "<td>";
              if($file = readdir($verz))
              {
                  if ($file != "." && $file != "..")
                      echo "<img src="" . $file . "">";

      Das heißt also, für . und .. wird zwar kein Inhalt dargestellt, die Zelle existiert trotzdem.

      else
                      $fileFound = false;

      und alles andere beendet dann die while-Schleife

      }

      wohingegen hier, wenn readdir() am Ende ist (oder '0' liefert) einfach weitergemacht wird bis zum Abbruch durch max_execution_time

      echo "</td>";
          }
          echo "</tr>";
      }
      echo "</table>";

      echo "$verabschiedung $name";