w3concepts.gallery.v1 unter Contenido 4.6.15 und PHP5 gelöst

Gesperrt
josh
Beiträge: 156
Registriert: Do 24. Jun 2004, 09:25
Wohnort: Ahlen
Kontaktdaten:

w3concepts.gallery.v1 unter Contenido 4.6.15 und PHP5 gelöst

Beitrag von josh »

Bei der Umstellung auf Contento 4.6.15 und PHP5 gab es Probleme:

1. Leere Ordnerauswahl im Eingabemodul
2. Fehler im Ausgabemodul mit getimagesize

:oops: Habe lange im Forum gesucht und an verschiedenen Stellen die Lösung zusammengesucht.
Eingabe und Ausgabemodul stammen aus verschiedenen Beiträgen.
Das ganze ist also nicht auf meinem Mist gewachsen. Danke für die Hilfe!

Ich habe das ganze mal hier zusammengebracht. Bei mir läuft die Galerie jetzt einwandfrei


1. Leere Ordnerauswahl im Eingabemodul

Lösung:
Die Funktion array_merge wurde in der PHP Version 5 überarbeitet.
Den Hinweis fand ich hier:
http://contenido.org/forum/viewtopic.php?p=58195#58195


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
* Modified    :     01-06-2007 für Contenido 4.6.15 / PHP5
************************************************/

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((array)$returnvalue,(array)$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>";


2. Fehler im Ausgabemodul mit getimagesize

Lösung:
Die Lösung fand ich hier: (Nur Ausgabe Modul)
http://www.contenido.de/forum/viewtopic ... 8422#48606


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 
* Modified    :     01-06-2007 für Contenido 4.6.15 / PHP5
************************************************/ 

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:

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> 
Manji
Beiträge: 1
Registriert: Do 11. Sep 2008, 12:50
Kontaktdaten:

Beitrag von Manji »

Kann mir jemand sagen wie ich die Reihenfolge der Thumbs ändern kann. Ich wollte die neuen Datein zuerst anzeigen lassen.
Gesperrt