um der Community auch mal was zurückgeben zu können (*dresch*) stelle ich im Folgenden mein just gebasteltes Galeriemodul zur Verfügung.
Ich weiß, es gibt schon viel in dieser Richtung, aber vielleicht braucht jemand genau das:
Was es kann:
- Auswahl des Bildordners über drop-down
- Anzeige der Bilder inkl Medianotiz
- Vergrößerung über Lightbox mit Bildbeschreibung
- Resize und Wasserzeichen
- Vor- und Zurückblättern
Was es nicht kann:
- eigentlich alles, es ging mir um eine Galerie, die einigermaßen schlank daherkommt und, einmal konfiguriert, komplett automatisiert läuft.
edit 13.2.2007: Anführungszeichen und neue Beschriftung für vor und zurück
edit 19.2.2007: Endtag </a> bei vorherige Bilder eingefügt, Lightbox-Skript-Aufruf ist jetzt im Modul eingebaut und erwartet das Script im Ordner /js/.
Demo:
http://www.chorakademie.de/chorakademie ... p?idcat=60
Installation:
Bilder in der Dateiverwaltung nach Bedarf beschriften, Wasserzeichen als wasserzeichen.png in /images speichern.
Sonst ist nichts zu beachten.
Download als xml:
http://www.chorakademie.de/info/jag_-_j ... y_1.01.xml
Input
Code: Alles auswählen
?><?php
/***********************************************
* jag - just another gallery 1.01 INPUT
*
* Input basiert auf Bildergalerie
* Author : Timo A. Hummel
* Copyright : four for business AG
* Created : 30-09-2005
* modified : 02-02-2007 by Marc Schettke
************************************************/?>
<table>
<?php echo '<tr><td>'.mi18n("Verzeichnis auswählen").'</td><td>
<select name="CMS_VAR[0]" size="1" style="width: 320px">
<option value="">Nichts ausgewählt</option>';
recursive_list($cfgClient[$client]["upl"]["path"], '\__');
echo '</select></td></tr>';?>
<tr>
<td><?php echo "Größe Vorschaubilder <br> (Breite x Höhe)";?></td>
<td><input type="text" size="5" name="<?php echo "CMS_VAR[1]"; ?>" value="<?php echo "CMS_VALUE[1]"; ?>"> x
<input type="text" size="5" name="<?php echo "CMS_VAR[2]"; ?>" value="<?php echo "CMS_VALUE[2]"; ?>"></td>
</tr>
<tr>
<td><?php echo "Vorschautabelle <br> (Spalten x Zeilen)";?></td>
<td><input type="text" size="5" name="<?php echo "CMS_VAR[3]"; ?>" value="<?php echo "CMS_VALUE[3]"; ?>"> x
<input type="text" size="5" name="<?php echo "CMS_VAR[4]"; ?>" value="<?php echo "CMS_VALUE[4]"; ?>">
</td>
</tr>
<tr>
<td><?php echo "Breite Detailansicht";?></td>
<td><input type="text" name="<?php echo "CMS_VAR[5]"; ?>" value="<?php echo "CMS_VALUE[5]"; ?>"></td>
</tr>
<!-- <tr>
<td><?php echo "Sortierung";?></td>
<td>
<select name="<?php echo "CMS_VAR[6]"; ?>" value="<?php echo "CMS_VALUE[6]"; ?>">
<option value=Dateiname>Dateiname</option>
<option value=Medienname>Medienname</option>
<option value=Beschreibung>Beschreibung</option>
<option value=Schluesselwoerter>Schluesselwoerter</option>
<option value=Internenotiz>Internenotiz</option>
</select>
</td>
</tr> -->
</table>
<?php
//Build folder list recursively
function recursive_list($sPathDir, $sPrefix, $sPathBase = 0) {
if (!$sPathBase) { $sPathBase = $sPathDir; } //Basispfad sichern
$sSelected = "CMS_VALUE[0]";
$old_path = getcwd();
if (is_dir($sPathDir)) {
chdir($sPathDir);
$myhandle = opendir('.');
while (($mydir = readdir($myhandle)) !== false) {
if (($mydir != ".") && ($mydir != "..") && ($mydir != "thumbs")) {
if (is_dir($mydir)) {
$cleandir = str_replace($sPathBase, '', $sPathDir.$mydir);
if ($sSelected == $cleandir.'/') {
echo '<option selected value="'.$cleandir.'/">'.$sPrefix.$mydir.'</option>';
} else {
echo '<option value="'.$cleandir.'/">'.$sPrefix.$mydir.'</option>';
}
recursive_list($sPathDir.$mydir."/", ' '.$sPrefix, $sPathBase);
chdir($sPathDir);
}
}
}
closedir($myhandle);
}
chdir($old_path);
return;
}
Code: Alles auswählen
<?php
/***********************************************
* jag - just another gallery 1.01 OUTPUT
*
* Author : Marc Schettke / Codeschnipsel: Timo Hummel, Large Green Wood
* Created : 31-01-2007
************************************************/
?>
<script type="text/javascript" src="js/lightbox.js"></script>
<style>
#lightbox{
background-color:#eee;
padding: 10px;
border-bottom: 2px solid #666;
border-right: 2px solid #666;
}
#lightboxDetails{
font-size: 0.8em;
padding-top: 0.4em;
}
#lightboxCaption{ float: left; }
#keyboardMsg{ float: right; }
#lightbox img{ border: none; }
#overlay img{ border: none; }
</style>
<?php
cInclude("includes", "functions.api.images.php");
cInclude("classes", "class.ui.php");
cInclude("classes", "class.htmlelements.php");
cInclude("classes", "class.properties.php");
cInclude("includes", "functions.upl.php");
$properties = new PropertyCollection;
$imageDir="CMS_VALUE[0]";
$thbXSize="CMS_VALUE[1]";
$thbYSize="CMS_VALUE[2]";
$cols="CMS_VALUE[3]";
$rows="CMS_VALUE[4]";
$detailSize="CMS_VALUE[5]";
/***** EINSTELLUNGEN ***********/
$thbDir = $imageDir.'thumbs/';
$validExtensions = array (
"jpg",
"jpeg",
"gif",
"png"
);
// Verzeichnis auslesen
if ($dir = opendir($cfgClient[$client]['upl']['path'].$imageDir))
{
$imageFiles = array();
while (false !== ($file = readdir($dir))) {
if ($file != "." && $file != "..") {
array_push($imageFiles, $file);
}
}
closedir($dir);
}
if (is_array($imageFiles)) {
// Bilder mit falscher Dateiendung aussortieren
foreach ($imageFiles as $key => $imageFile) {
$fileExtension = strtolower(getFileExtension($imageFile));
if (!in_array($fileExtension, $validExtensions)) {
unset ($imageFiles[$key]);
}
}
// anzuzeigende Bilder filtern
$imagesPerPage = $rows * $cols;
$fileCount = count($imageFiles);
$pages = ceil($fileCount / $imagesPerPage);
if (!isset($page) || $page>$pages || $page<1) {$page = 1;}
$imagesToDisplay = array_slice($imageFiles, ($page -1) * $imagesPerPage, $imagesPerPage);
// Array mit allen Bildattributen erstellen
$galleryArray = array();
foreach ($imagesToDisplay as $file) {
$imageAttributes = array (file => $file,
medianame => getMedianame($imageDir.$file),
description => getImageDescription($imageDir,$file),
keywords => getKeywords($imageDir.$file),
medianotes => getMedianotes($imageDir.$file));
array_push($galleryArray, $imageAttributes);
}
} else {
echo "In dieser Galerie wurden keine Bilder hinterlegt!";
}
// Thumbnails generieren und Bilder verkleinern (wenn nötig)
foreach ($galleryArray as $key => $image) {
$imgPath = $cfgClient[$client]['upl']['path'].$imageDir.$image['file'];
$thbPath = $cfgClient[$client]['upl']['path'].$imageDir.'thumbs/thb_'.$image['file'];
if (!is_dir($cfgClient[$client]['upl']['path'].$imageDir.'thumbs/'))
{ @mkdir($cfgClient[$client]['upl']['path'].$imageDir.'thumbs/');}
if (!file_exists($thbPath) ) {
// Thumbnails mit GD verkleinern
@ini_set("max_execution_time", 120);
@resizeImageGD($imgPath, $thbPath, $thbXSize,$thbYSize);
$thumbnail=file_exists($thbPath);
//Wasserzeichen einbauen und Bilder verkleinern
$size = getimagesize($imgPath);
$width_old = $size[0];
$height_old = $size[1];
$old_picture = imagecreatefromjpeg($imgPath);
if ($width_old > $height_old) {
$width_new = $detailSize;
$height_new = intval($height_old * $width_new / $width_old);
}
else {
$height_new = $detailSize;
$width_new = intval($width_old * $height_new / $height_old);
}
if ($height_new > $height_old || $width_new > $width_old) {
$height_new = $height_old;
$width_new = $width_old;
}
$new_picture = imagecreatetruecolor($width_new, $height_new);
imagecopyresampled($new_picture, $old_picture, 0, 0, 0, 0, $width_new, $height_new, $width_old, $height_old);
$transition = 40;
$watermarkfile = imagecreatefrompng('images/wasserzeichen.png');
$watermarkpic_width = imagesx($watermarkfile);
$watermarkpic_height = imagesy($watermarkfile);
$watermarkdest_x = $width_new - $watermarkpic_width - 5;
$watermarkdest_y = $height_new - $watermarkpic_height - 5;
imagecopymerge($new_picture, $watermarkfile, $watermarkdest_x, $watermarkdest_y, 0, 0, $watermarkpic_width, $watermarkpic_height, $transition);
imagejpeg($new_picture, $imgPath, 100);
}
else {
$thumbnail=true;
}
}
$thbDir = $cfgClient[$client]['upl']['htmlpath'].$imageDir.'thumbs/';
$imgDir = $cfgClient[$client]['upl']['htmlpath'].$imageDir;
$linkNext = $cfgClient[$client]["path"]["htmlpath"] . sprintf("front_content.php?idcatart=%s&page=%s", $idcatart, $page+1);
$linkPrev = $cfgClient[$client]["path"]["htmlpath"] . sprintf("front_content.php?idcatart=%s&page=%s", $idcatart, $page-1);
reset($galleryArray);
echo "<h1>CMS_HTMLHEAD[1]</h1>";
echo '<table><tr><td>
zeige Bilder: '.($imagesPerPage*($page-1)+1).' - '.($imagesPerPage*($page-1)+$imagesPerPage).'</td>';
if($page>1) {
echo '<td><a href="'.$linkPrev.'">... vorherige Bilder </a></td>';}
echo '<td>';
if ($pages>$page){
echo '<a href="'.$linkNext.'"> weitere Bilder...</a>';}
echo '</td></tr>';
for($i=$rows;$i>0;$i--) {
echo "<tr name='$i'>";
for($j=$cols;$j>0;$j--){
if($img = each ($galleryArray)){
echo '<td name='.$j.'><div class="galleryImg">
<a href="'.
$imgDir.$img[1]['file'].'" rel="lightbox" target="_blank" title="'.
$img[1]['description'].'"><img src="'.$thbDir.'thb_'.$img[1]['file'].'"></a><br>'.
$img[1]['medianame'].'</div></td>';
} else {
break;
}
}
echo "</tr>";
}
echo '</table>';
/*********** FUNKTIONEN *****************/
function getKeywords($wname) {
//schluesselwoerter keywords $keywords
global $properties;
$keywords = $properties->getValue("upload", $wname, "file", "keywords");
return $keywords;
}
function getMedianame($wname) {
global $properties;
$medianame = $properties->getValue("upload", $wname, "file", "medianame");
return $medianame;
}
function getMedianotes($wname) {
//internenotiz medianotes $medianotes
global $properties;
$medianotes = $properties->getValue("upload", $wname, "file", "medianotes");
return $medianotes;
}
function getImageDescription($dirname,$filename){
global $cfg, $cfgClient, $db, $client, $lang;
$query = "SELECT description FROM ".$cfg["tab"]["upl"]." WHERE (dirname = '".$dirname."') AND (filename='".$filename."')";
$db->query($query);
if($db->next_record()){
return htmlspecialchars(urldecode($db->f("description")));
}else {
return '';
}
}
// verkleinert ein Bild auf die angegebene Breite (bei Querformat) oder Höhe (bei Hochformat)
// Seitenverhältnisse werden beibehalten
function resizeImageGD($sourceFile, $targetFile, $newwidth=50, $newheight=50){
$source = ImageCreateFromJpeg($sourceFile);
$width = ImageSx($source);
$height = ImageSy($source);
if ($width > $height){ // Querformat
$newheight = $height*($newwidth/$width);
}else{ // Hochformat
$newwidth = $width*($newheight/$height);
}
$target = ImageCreateTrueColor($newwidth,$newheight);
// ÄNDERUNG vgl. Forums-Beitrag imagecopyresized ($target, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagecopyresampled ($target, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
ImageJPEG($target,$targetFile,100);
}
?>
ToDo: Sortierfunktion einarbeiten, Überschrift(?)
Viele Grüße
_Marc