So mein erster Post hier, sonst war ich immer nur am mitlesen und "rumprobieren".
Also ich habe folgendes Problem:
Wenn die Anzahl der Bilder nur für eine Seite reicht, dann bricht Contenido den Code ab. Im Klartext steht dann irgendwo am Ende des Codes noch ein </td> der letzen Zelle aber das was eigentlich danach kommt, wird nicht mehr ausgegeben.
Veranschaulichung:
http://www.carl.down-n-out.de/biervamp- ... 3&idart=40
Wenn mehrere Seiten erzeugt werden, geht alles wunderbar :
http://www.carl.down-n-out.de/biervamp- ... 3&idart=36
Von mir wird der folgende Input und Output Code verwendet:
Input:
Code: Alles auswählen
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :       w3concepts.gallery.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     30-08-2004
* Modified    :     30-08-2004
************************************************/
class pfad {
   function pfad($pfad) {
      $this->pfad = $pfad;
      $this->pathlen = strlen($this->pfad);
   }
   function getPath($root,$level = 0) {
      $content = $this->readDir($root);
      foreach ($content as $file) {
         if (is_dir($root.$file)) {
            $verzeichnis = substr($root,$this->pathlen);
            $returnvalue["{$verzeichnis}{$file}/"] = str_repeat(" ",$level * 5).$file;
            $returnvalue = array_merge($returnvalue,$this->getPath($root.$file."/",$level+1));
         }
      }
      return $returnvalue;
   }
   function readDir($path) {
      $handle = opendir($path);
      while ($file = readdir ($handle)) {
         if ($file != "." && $file != "..") $returnvalue[] = $file;
      }
      closedir($handle);
      return $returnvalue;
   }
   function makeSelect($preselection) {
      $pfad = $this->getPath($this->pfad);
      foreach ($pfad as $key => $value) {
         if ($preselection == $key) {
            echo "<option value=\"$key\" selected=\"selected\">$value</option>";
         } else {
            echo "<option value=\"$key\">$value</option>";
         }
      }
   }
}
$pfad = new pfad($cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upload']);
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">";
echo "<tr><td>Bilderpfad:</td>";
echo "<td><select size=\"1\" name=\"CMS_VAR[0]\" />";
$pfad->makeSelect("CMS_VALUE[0]");
echo "</td>";
echo "<tr><td>Thumbnailpfad:</td>";
echo "<td><select size=\"1\" name=\"CMS_VAR[1]\" />";
$pfad->makeSelect("CMS_VALUE[1]");
echo "</td>";
echo "<tr><td>Thumbnailbreite (Max.):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\" size=\"5\" /></td>";
echo "<tr><td>Thumbnailhöhe (Max.):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" size=\"5\" /></td>";
echo "<tr><td>Anzahl Spalten:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\" size=\"5\" /></td>";
echo "<tr><td>Anzahl Zeilen:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[5]\" value=\"CMS_VALUE[5]\" size=\"5\" /></td>";
echo "<tr><td>Text für Previous-Link:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[6]\" value=\"CMS_VALUE[6]\" size=\"15\" /></td>";
echo "<tr><td>Text für Next-Link:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[7]\" value=\"CMS_VALUE[7]\" size=\"15\" /></td>";
echo "</table>";Code: Alles auswählen
<?
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :       w3concepts.gallery.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     30-08-2004
* Modified    :     30-08-2004
************************************************/
class gallery {
   function gallery() {
      // initialwerte setzen
      $this->setInitValues();
      // aussteigen, falls initialwerte nicht sinnvoll
      if (!$this->checkInitValues()) return false;
      // quellverzeichnis auslesen
      $this->readDir();
      // zeiger für showNextPicture setzen
      if (empty($_REQUEST['pos'])) {
         $this->showNextPictureSeq = -1;
      } else {
         $this->showNextPictureSeq = $_REQUEST['pos'] - 1;
      }
      // datenbankzugriff initialisieren
      $this->db = new DB_Contenido;
      // galerie ausgeben
      $this->showGallery();
      // gegebenenfalls navigation ausgeben
      $this->showNavigation();
   }
   function setInitValues() {
      // konfigurationswerte aus dem input-script
      // übernehmen
      $this->path['pictures'] = "CMS_VALUE[0]";
      $this->path['thumbs'] = "CMS_VALUE[1]";
      $this->path['upload'] = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['upload'];
      $this->path['html'] = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['path']['htmlpath'];
      $this->abspath['pictures'] = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['path']['frontend'].$GLOBALS['cfgClient']["{$GLOBALS['client']}"]['upload'].$this->path['pictures'];
      $this->abspath['thumbs'] = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['path']['frontend'].$GLOBALS['cfgClient']["{$GLOBALS['client']}"]['upload'].$this->path['thumbs'];
      $this->htmlpath = $GLOBALS['cfgClient']["{$GLOBALS['client']}"]['path']['htmlpath'].$GLOBALS['cfgClient']["{$GLOBALS['client']}"]['upload'];
      $this->thumbnailSize['width'] = "CMS_VALUE[2]";
      $this->thumbnailSize['height'] = "CMS_VALUE[3]";
      $this->tableSize['cols'] = "CMS_VALUE[4]";
      $this->tableSize['rows'] = "CMS_VALUE[5]";
      $this->link['previous'] = "CMS_VALUE[6]";
      $this->link['next'] = "CMS_VALUE[7]";
   }
   function checkInitValues() {
      // prüfen, ob es sich bei den übergebenen pfaden
      // um tatsächlich vorhandene pfade im dateisystem
      // handelt. gegebenenfalls wird eine ausgabe
      // an den browser vorgenommen und false zurückgegeben.
      if (!chdir($this->abspath['pictures'])) {
         echo "<p>Das Verzeichnis '{$this->abspath['pictures']}' existiert im Dateisystem
            des Servers nicht. Entweder müssen Sie es noch anlegen oder die
            Konfiguration Ihres Modules anpassen.</p>";
         return false;
      }
      if (!chdir($this->abspath['thumbs'])) {
         echo "<p>Das Verzeichnis '{$this->abspath['thumbs']}' existiert im Dateisystem
            des Servers nicht. Entweder müssen Sie es noch anlegen oder die
            Konfiguration Ihres Modules anpassen.</p>";
         return false;         
      }
      if ($this->thumbnailSize['width'] == '') $this->thumbnailSize['width'] = 100;
      if ($this->thumbnailSize['height'] == '') $this->thumbnailSize['height'] = 100;
      if ($this->tableSize['cols'] == '') $this->tableSize['cols'] = 3;
      if ($this->tableSize['rows'] == '') $this->tableSize['rows'] = 3;
      if ($this->link['previous'] == '') $this->link['previous'] = '[:: rückwärts ]';
      if ($this->link['next'] == '') $this->link['next'] = '[ vorwärts ::]';
      // rückgabe im erfolgsfall
      return true;
   }
   function readDir() {
      $dir = opendir($this->abspath['pictures']);
      while ($file = readdir($dir)) {
         $bildinfo = getimagesize($this->abspath['pictures'].$file);
         if (!empty($bildinfo)) {
            $picture[] = $file;
         }
      }
      sort($picture[]);
      closedir($dir);
      foreach ($picture as $picture2) {
         if (!empty($picture2)) $this->picture[] = $picture2;
      }
   }
   function showNextPicture() {
      // zeiger um eins erhöhen
      $this->showNextPictureSeq++;
      // wenn keine bild mehr vorhanden ist, false zurück geben
      if ($this->showNextPictureSeq >= count($this->picture)) return '';
      // thumbnail generieren falls erforderlich
      $size = $this->generateThumb($this->picture["{$this->showNextPictureSeq}"]);
      // originalgrösse des bildes ermitteln
      $originalsize = getimagesize($this->abspath['pictures'].$this->picture["{$this->showNextPictureSeq}"]);
      // referenz zurück geben
      //return "<a href=\"#\" onClick=\"window.open('{$this->path['html']}popupviewer.php?uri={$this->path['upload']}{$this->path['pictures']}{$this->picture[$this->showNextPictureSeq]}','bild','width={$originalsize[0]},height={$originalsize[1]},top=10,left=10,scrollbars=no,topmargin=0,leftmargin=0');bild.document.body.style.margin=0;\"><img src=\"{$this->htmlpath}{$size['filename']}\" width=\"{$size['width']}\" height=\"{$size['height']}\" border=\"0\" /></a>";
      return "<a href=\"javascript:window.open('{$this->path['html']}popupviewer.php?uri={$this->path['upload']}{$this->path['pictures']}{$this->picture[$this->showNextPictureSeq]}','bild','width={$originalsize[0]},height={$originalsize[1]},top=10,left=10,scrollbars=no,topmargin=0,leftmargin=0');bild.document.body.style.margin=0;\"><img src=\"{$this->htmlpath}{$size['filename']}\" border=\"0\" width=\"{$size['width']}\" height=\"{$size['height']}\" /></a>";
   }
   function generateThumb($filename) {
      $src_image_size = getimagesize($this->abspath['pictures'].$filename);
      // prüfen, ob thumbnail bereits vorhanden ist
      if (!file_exists("{$this->abspath['thumbs']}{$this->thumbnailSize['width']}.{$this->thumbnailSize['height']}.$filename.jpg")) {
         // ermitteln ob das bild auf bestimmte höhe oder bestimmte breite zu reduzieren ist
         // sowie ermitteln, um welchen faktor das bild zu verkleinern ist
         if ($src_image_size[0]/$src_image_size[1] > $this->thumbnailSize['width']/$this->thumbnailSize['height']) {
            $verkleinerungsfaktor = $this->thumbnailSize['width']/$src_image_size[0];
         } else {
            $verkleinerungsfaktor = $this->thumbnailSize['height']/$src_image_size[1];
         }
         // berechnen der thumbnailgrösse
         $bildhoehe = round($src_image_size[1] * $verkleinerungsfaktor);
         $bildbreite = round($src_image_size[0] * $verkleinerungsfaktor);
         // thumbnail erstellen
         $dst_im = imagecreatetruecolor($bildbreite,$bildhoehe);
         if ($src_image_size[2] == 1) {
            $src_im = imagecreatefromGIF("{$this->abspath['pictures']}$filename");
         } elseif ($src_image_size[2] == 2) {
            $src_im = @ImageCreateFromJPEG("{$this->abspath['pictures']}$filename");
         } else {
            $src_im = @imagecreatefromgd("{$this->abspath['pictures']}$filename");
         }
         imagecopyresampled ($dst_im,$src_im,0,0,0,0,$bildbreite,$bildhoehe,$src_image_size[0],$src_image_size[1]);
         imagejpeg ($dst_im,"{$this->abspath['thumbs']}{$this->thumbnailSize['width']}.{$this->thumbnailSize['height']}.$filename.jpg",100);
         
         $size['width'] = $bildbreite;
         $size['height'] = $bildhoehe;
      } else {
         $thumbnailsize = getimagesize("{$this->abspath['thumbs']}{$this->thumbnailSize['width']}.{$this->thumbnailSize['height']}.$filename.jpg");
         $size['width'] = $thumbnailsize[0];
         $size['height'] = $thumbnailsize[1];
      }
      $size['filename'] = "{$this->path['thumbs']}{$this->thumbnailSize['width']}.{$this->thumbnailSize['height']}.$filename.jpg";
   
      return $size;
   }
   function getDescription() {
      
      $sql = "SELECT description FROM {$GLOBALS['cfg']['tab']['upl']}
         WHERE
            filename = '{$this->picture[$this->showNextPictureSeq]}'
            AND dirname = '{$this->path['pictures']}'
         ";
      $this->db->query($sql);
      $this->db->next_record();
      return $this->db->f("description");;
   }
   function showGallery() {
      $cellwidth = floor(100/$this->tablesize['cols']);
      echo "<table width=\"100%\">\n";
      for ($i = 0;$i < $this->tableSize['rows'];$i++) {
         $beschreibung = null;
         echo "<tr>\n";         
         for ($j = 0;$j < $this->tableSize['cols'];$j++) {
            echo "<td align=\"left\" valign=\"top\" width=\"$cellwidth\">\n".$this->showNextPicture()."\n</td>\n";
            $beschreibung[] = $this->getDescription();
         }
         echo "</tr>\n";
         echo "<tr>\n";
         for ($j = 0;$j < $this->tableSize['cols'];$j++) {
            echo "<td align=\"left\" valign=\"top\" width=\"$cellwidth\" style=\"padding-bottom:10px;\">\n{$beschreibung[$j]}\n</td>\n";
         }
         echo "</tr>\n";
      }
      echo "</table>\n";
   }
   function showNavigation() {
      if ($this->tableSize['cols'] * $this->tableSize['rows'] < count($this->picture)) {
         echo "<table width=\"100%\">\n<tr>\n";
         if (!empty($_REQUEST['pos'])) {
            $pos = ($this->showNextPictureSeq <= $this->tableSize['cols'] * $this->tableSize['rows']) ? (0) : ($this->showNextPictureSeq - (2 * $this->tableSize['cols'] * $this->tableSize['rows']) + 1);
            $pos = ($pos < 0) ? (0) : ($pos);
            $link = $GLOBALS['sess']->url("front_content.php?client={$GLOBALS['client']}&lang={$GLOBALS['lang']}&idcat={$GLOBALS['idcat']}&idart={$GLOBALS['idart']}&pos=$pos");
            echo "<td style=\"text-align:left; width:33%\"><a href=\"$link\">{$this->link['previous']}</a></td>";
         } else {
            echo "<td style=\"text-align:left; width:33%\"> </td>";
         }
         echo "<td align=\"center\" width=\"33%\"> </td>";
         if ($this->showNextPictureSeq + 1 < count($this->picture)) {
            $pos = $this->showNextPictureSeq + 1;
            $link = $GLOBALS['sess']->url("front_content.php?client={$GLOBALS['client']}&lang={$GLOBALS['lang']}&idcat={$GLOBALS['idcat']}&idart={$GLOBALS['idart']}&pos=$pos");
            echo "<td style=\"text-align:right; width:33%\"><a href=\"$link\">{$this->link['next']}</a></td>";
         } else {
            echo "<td style=\"text-align:right; width:33%\"> </td>";
         }
         echo "</tr>\n</table>\n";
      }
   }
}
$gallery = new gallery();
?>