Problem mit w3concepts.gallery.v1

Gesperrt
Gemini
Beiträge: 3
Registriert: Mi 16. Mär 2005, 22:09
Kontaktdaten:

Problem mit w3concepts.gallery.v1

Beitrag von Gemini » Mi 16. Mär 2005, 22:30

Hallo ;)

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("&nbsp;",$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>";
Output:

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%\">&nbsp;</td>";
         }

         echo "<td align=\"center\" width=\"33%\">&nbsp;</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%\">&nbsp;</td>";
         }

         echo "</tr>\n</table>\n";
      }
   }

}

$gallery = new gallery();
?>
Warum einfach, wenns auch kompliziert geht?

Gemini
Beiträge: 3
Registriert: Mi 16. Mär 2005, 22:09
Kontaktdaten:

Beitrag von Gemini » Do 17. Mär 2005, 16:40

niemand ne idee ?
Warum einfach, wenns auch kompliziert geht?

Eric A.
Beiträge: 75
Registriert: Sa 15. Jan 2005, 18:04
Wohnort: Laer - NRW
Kontaktdaten:

Beitrag von Eric A. » Do 17. Mär 2005, 19:55

Hallo Gemini,

ich würde dir gerne helfen. Leider verstehe ich die Frage nicht.
Sonst kann ich dir schon sagen, dass du nicht alle Korrektur in diesen Quellcode eingepflegt hast.
schaue hier: http://www.contenido.org/forum/viewtopi ... c&start=30

Gruß
Eric
Contenido 4.4.5-r1
Contenido V4.6.15 Version MR

Gemini
Beiträge: 3
Registriert: Mi 16. Mär 2005, 22:09
Kontaktdaten:

Beitrag von Gemini » Do 17. Mär 2005, 20:18

also das problem hat sich jetzt spezifiziert:

Ich kann genau 2 Artikel mit diesem Gallery Modul erstellen, beim 3. Artikel bricht er bei der Ausgabe einfach den Code ab.

Siehe hier:
http://carl.down-n-out.de/biervamp-site ... 3&idart=42

Bei den ersten 2 Artikeln geht es.
Siehe hier:
1.) http://carl.down-n-out.de/biervamp-site ... 3&idart=36
2.) http://carl.down-n-out.de/biervamp-site ... 3&idart=37

Die Korrekturen bringens wohl auch nicht :(
Warum einfach, wenns auch kompliziert geht?

Eric A.
Beiträge: 75
Registriert: Sa 15. Jan 2005, 18:04
Wohnort: Laer - NRW
Kontaktdaten:

Beitrag von Eric A. » Do 17. Mär 2005, 23:47

Hallo,

jetzt habe ich dass problem gesehen. Nachvollziehen kann ich ncihts.
Vielleicht kann dir jemanden anders weiterhelfen.

Gruß
Eric

PS: kleine Anmerkung du benutzt CMS Contenido 4.5.2 ALPHA. Vielleicht hängt es damit zusammen?
Contenido 4.4.5-r1
Contenido V4.6.15 Version MR

Gesperrt