Seite 1 von 1

Problemchen mit w3concepts.gallery.v1 uuner 4.5.2...

Verfasst: Fr 27. Mai 2005, 13:48
von stsofd
Hallo,

kann mir bitte jemand helfen:

ich habe endlich wieder die "richtige" (meiner Meinung nach beste) Gallery gefunden.

Aber folgendes Problem:

Es werden oberhalb der Bilder (thmbs) folgene infos geschrieben:
:(
Warning: getimagesize(): Read error! in /homepages/21/d97842600/htdocs/vaterhaus/contenido/includes/include.con_editcontent.php(615) : eval()'d code on line 1102

Warning: getimagesize(): Read error! in /homepages/21/d97842600/htdocs/vaterhaus/contenido/includes/include.con_editcontent.php(615) : eval()'d code on line 1102

Warning: getimagesize(): Read error! in /homepages/21/d97842600/htdocs/vaterhaus/contenido/includes/include.con_editcontent.php(615) : eval()'d code on line 1102

Warning: sort() expects parameter 1 to be array, null given in /homepages/21/d97842600/htdocs/vaterhaus/contenido/includes/include.con_editcontent.php(615) : eval()'d code on line 1107

Warning: Division by zero in /homepages/21/d97842600/htdocs/vaterhaus/contenido/includes/include.con_editcontent.php(615) : eval()'d code on line 1193


Leider habe ich nicht tiefergehende Erfahrungen mit php und co.

Kann mir deshalb bitte jemand helfen.... :?:

Lösung zu w3concepts.gallery.v1 für 4.5.2 alpha

Verfasst: Sa 28. Mai 2005, 10:33
von stsofd
Nach einigem Suchen im Forum habe ich selbst eine Lösung zum Modul w3concepts.gallery.v1 für die Version 4.5.2 alpha entdeckt.

Der Outputcode wurde von w3c selbst irgendwann mal berichtigt (für 4.4.4..) - aber in der Download-zip nicht angepasst.

Deshalb hier der gesamte (richtige) Modulcode:

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>";



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; 
         } 
      } 
      rsort($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']}\" /></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']}\" 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; font-style: italic;\">\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(); 
?>

Nicht vergessen:
Popupviewer

Code: Alles auswählen

<html>

        <head>
                <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
                <meta name="generator" content="Adobe GoLive 5">
                <title></title>
                <style media="screen" type="text/css"><!--
#layer1 { position: absolute; top: 0px; left: 0px; visibility: visible }
--></style>
<SCRIPT TYPE="text/javascript">

<!--
function targetopener(mylink, closeme, closeonly)
{
if (! (window.focus && window.opener))return true;
window.opener.focus();
if (! closeonly)window.opener.location.href=mylink.href;
if (closeme)window.close();
return false;
}
//-->

</SCRIPT>
        </head>

        <body bgcolor="#ffffff">
                <div id="layer1">
                        <a href="/"  onClick="return targetopener(this,true,true)"><img src="<?print $_GET['uri'];?>" border="0"></a></div>
                <p></p>
        </body>

</html>

Das Modul arbeitet zumindest unter 4.5.2 so wie es sollte.

keine ordner-auswahl

Verfasst: Mi 27. Jul 2005, 17:54
von #ayshe
Hallo,

ich habe Deinen geposteten Code übernommen, da ich mit Andreas' Code ein Problem hatte. Nun habe ich aber immer noch dasselbe Problem: In der Konfiguration (bzw. "Vorkonfiguration") des Moduls steht in den Dropdowns kein Ordner zur Auswahl. Muss ich bestimmte Ordner erst anlegen? Oder muss ich im Modul noch was ergänzen?

Viele Grüße,
Ayshe


(Contenido 4.4.5)

Verfasst: Mi 27. Jul 2005, 21:49
von stsofd
Hallo,

also wenn Du den vollständigen Code (Input + Output) und den Code für die PopUp-Bilder übernommen hast, müsste alles funktionieren.

Für die Eingabemaske ist der Input-Code zuständig.
-> Übernimm den vollständigen Input-Code und es müsste funktionieren.

Die Eingabemaske sieht bei mir so aus:
Bild

:arrow: Es werden alle Ordner angezeigt, in denen ~.jpg Dateien vorhanden sind.
:arrow: Ich habe im Ordner 'Upload' jeweils neue Ordner mit den 'großen' Bildern (Bsp. "Advent 2004) angelegt und in diesen Ordner die Bilddateien geladen.
:arrow: innerhalb des Bild-Ordners mit den großen Bildern lege ich dann einen weiteren Ordner für die Thumbs an (Bsp. Advent 2004/Advent_thumbs) Dort werden automatisch die generierten Thumbs abgelegt.

:!: Achtung: die Modulversion von mir habe ich für die Contenido-Version 4.5.3 beta (bzw. 4.5.x) angepasst gehabt.
Bei älteren Versionen können also Probleme auftreten. Das habe ich nicht getestet.

In der Hoffnung etwas nützliches getan zu haben...