Features
Die Bildergalerie erzeugt von allen Bilder, die sich im bezeichneten Verzeichnis befinden Thumbnails (Grösse konfigurierbar) und erstellt damit eine Galerie (Anzahl Spalten und Zeilen je Seite sowie die Links für Vorwärts und Rückwärts sind konfigurierbar). Durch Klicken auf ein Bild, wird dieses in Originalgrösse in einem Popup dargestellt. Durch erneutes Klicken auf das Bild im Popup wird es auch wieder geschlossen.
Unter den Thumbnails wird die Bildbeschreibung ausgegeben, die in der Dateiverwaltung gepflegt werden kann.
Installation
(1) Input-Script in Input-Bereich kopieren
(2) Output-Script in den Output-Bereich kopieren
(3) Die Datei 'popupviewer.php' in das selbe Verzeichnis kopieren, wie die Datei 'front_content.php'.
(4) Modul konfigurieren.
Input-Script
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']}\" /></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;\">\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();
?>
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>
gruss,
andreas