Cybaer: Dynamische Bildervorschau

Beitrag lesen

Hi,

Aber ganz fertige "Fertiglösungen" wird Dir hier wahrscheinlich niemand empfehlen.

Nur um Dir zu widersprechen ;-):

<?php // PHP >= 4.1.x / 20041210

if(!isset($SHOW["IndexDir"]) || !isset($showCore)) { $SHOW["IndexDir"]="/data"; } if(!isset($SHOW["IndexFile"])) { $SHOW["IndexFile"]="slideshow.txt"; } if(!isset($SHOW["NoIndex"])) { $SHOW["NoIndex"]=FALSE; } if(!isset($SHOW["NoSort"])) { $SHOW["NoSort"]=FALSE; }

// Serverpfad zum Root der Domain $hidePath=$_SERVER["DOCUMENT_ROOT"]; $hidePathLen=strlen($hidePath);

// Arbeitspfad ist der aktuelle ... $startPath=$hidePath.dirname($PHP_SELF); $urlPathOrg=str_replace("/","%2f",dirname($PHP_SELF)); // ... bzw. in dem URL mit 'path=' uebergebener if(isset($_GET["path"])) {  $startPath=$hidePath.$_GET["path"];  $urlPath=str_replace("/","%2f",$_GET["path"]); }

// Index-Datei fuer Reihenfolge? if(!$SHOW["NoIndex"]) {  if($SHOW["IndexDir"]) {   $indexFile=$hidePath.$SHOW["IndexDir"]."/".str_replace("/","_",substr(dirname($PHP_SELF),1)."/".$SHOW["IndexFile"]);  } else {   $indexFile=$startPath."/".$SHOW["IndexFile"];  } }

// Ggf. Index-Datei erstellen if(!is_file($indexFile) && !$SHOW["NoIndex"]) {

// Verzeichnis oeffnen  $handle=opendir($startPath);

// Wenn Verzeichnis geoeffnet:  if($handle) {   $imgPath=substr($startPath,$hidePathLen);   // Verzeichniseintraege durchgehen ...   while($entry=readdir($handle)) {    // ... in absoluten Server-Dateinamen sichern ...    $serverEntry="$startPath/$entry";    // ... und naechsten Eintrag holen, falls Eintrag keine oder leere Datei ist    if(!is_file($serverEntry) || !filesize($serverEntry)) { continue; }    // Absoluten Domain-Dateinamen ermitteln    $userEntry=substr($serverEntry,$hidePathLen);    // Image-Informationen ermitteln    $imageInfo=getimagesize($serverEntry);    // Wenn es eine "Web-Standard-Grafik" ist (Breite/Hoehe nicht 0, Typ: GIF, JPEG oder PNG):    if($imageInfo[0]*$imageInfo[1] && ($imageInfo[2]>=1 && $imageInfo[2]<=3)) {     // ALT-Attribut festlegen     $imgAlt="";     // Absoluten Domain-Dateinamen sichern     $imgURL=urlescape($userEntry);     // Breite & Hoehe sichern     $imgWidth=$imageInfo[0];     $imgHeight=$imageInfo[1];     // Alle Informationen in einem assoziativen Array sichern, mit dem Dateinamen als Schluessel     $images[$entry]=array("file"=>$imgURL,"width"=>$imgWidth,"height"=>$imgHeight);    }   }   closedir($handle);

// Grafiken nach Dateiname alphabetisch sortieren ...   if(is_array($images) && !$SHOW["NoSort"]) { ksort($images); }

// ... und in Index-Datei schreiben   $fp=@fopen($indexFile,"w");   if($fp) {    while(is_array($images) && list($key,$array)=each($images)) {     @fwrite($fp,$array["file"]."\n");    }    @fclose($fp);   }  } }

if(is_file($indexFile) && !$SHOW["NoIndex"]) {  // Index-Datei einlesen  $fp=@fopen($indexFile,"r");  $data=@fread($fp,filesize($indexFile));  @fclose($fp); } else {  // Dateinamen uebernehmen  $data="";  while(is_array($images) && list($key,$array)=each($images)) {   $data.=$array["file"]."\n";  } }

// Daten umwandeln in Array mit leerem Starteintrag $images=explode("\n","\n".$data); // Eintraege trimmen for($i=0;$i<count($images);$i++) { $images[$i]=trim($images[$i]); }

// Erste legale Nummer (0 ist ja leer) $firstNo=1; // Letzte legale Nummer (Anzahl-1, da Index bei 0 beginnt) $lastNo=count($images)-1; // Wenn letzter Eintrag leer (neue Leerzeile in Datei): Reduzieren $lastNo-=(!$images[$lastNo])?1:0;

// Anzuzeigende Bildnr. // - aus dem Parameer holen oder Startbild nehmen $fileNo=(isset($_GET["no"]))?$_GET["no"]:1; // Maximal letztmoegliches Bild $fileNo=($fileNo>$lastNo)?$lastNo:$fileNo; // Minimal erstmoegliches Bild $fileNo=($fileNo<$firstNo)?$firstNo:$fileNo; // Vorheriges Bild (oder 0) $prevNo=($fileNo!=$firstNo)?$fileNo-1:0; // Naechstes Bild (oder 0) $nextNo=($fileNo!=$lastNo)?$fileNo+1:0;

// Bildinfos holen if(is_file($hidePath.$images[$fileNo])) {  // ALT-Attribut: Name des Bildes (ohne Endung und " " statt "")  $imgAlt=str_replace(""," ",upto(basename($images[$fileNo]),"."));  // TITLE-Attribut: Großgeschriebener Verzeichnisname + ALT  $imgTitle=ucfirst(str_replace("_"," ",basename(dirname($images[$fileNo])))).': '.$imgAlt;  $imageInfo=getimagesize($hidePath.$images[$fileNo]);  $imgWidth=$imageInfo[0];  $imgHeight=$imageInfo[1]; }

// JavaScript-Code zum Vorladen des naechsten Bildes $jsCode=' if(document.images) { cache=new Array(); i=-1;'."\n"; if($nextNo) { $jsCode.='  i++; cache[i]=new Image(); cache[i].src="'.$images[$nextNo].'";'."\n"; } if($prevNo) { $jsCode.='  i++; cache[i]=new Image(); cache[i].src="'.$images[$prevNo].'";'."\n"; } $jsCode.=' }'."\n";

?>

<html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>amotiq.de - Slideshow <?=$imgTitle;?></title> <link rel="stylesheet" type="text/css" media="print" href="/data/amotiq-p.css"> <link rel="stylesheet" type="text/css" media="screen" href="/data/amotiq-s.css"> <script type="text/javascript" language="JavaScript"><!--  doc_type="Slideshow"; xJS=false; function b(e,f){if(xJS){deFocus(e,f);}}  FimgDir="/img/"; function Flip(FimgName) { if(xJS) { return F2(FimgName); }} function Flop(FimgName) { if(xJS) { return F1(FimgName); }} function Switch(Name1,Source1,Name2,Source2,Text,TopDown,All) { if(xJS) { return S(Name1,Source1,Name2,Source2,Text,TopDown,All); }} //--></script><script type="text/javascript" language="JavaScript" src="/data/amotiq.js"></script> </head>

<body bgcolor="#FFFFFF" text="#000000" scroll="auto" bottommargin="0" leftmargin="0" rightmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <basefont face="Arial, Helvetica, sans-serif">

<?php

echo '<table border="0" width="99%" height="99%" style="width:100%; height:100%;" cellspacing="0" cellpadding="0"><tr align="center" valign="top"><td height="1">'."\n"; if($lastNo>=$firstNo) {  echo ' <table border="0" cellspacing="0" cellpadding="0"><tr valign="middle">'."\n";  echo '  <td colspan="3" align="center"><small>&#160;</small></td>'."\n";  echo ' </tr><tr valign="middle">'."\n";  echo '  <td align="left"><font size="4"><b>'.(($prevNo)?('<a class="hidefocus" href="'.$PHP_SELF.'?no='.($prevNo).(($urlPath!=$urlPathOrg && $urlPath)?("&amp;path=".$urlPath):("")).'"  onMouseUp="b(this);" hidefocus>zur&uuml;ck</a>'):('')).'</b></font></td>'."\n";  echo '  <td align="center"><font size="3"><b>&#160;'.$fileNo.'/'.$lastNo.'&#160;</b></font></td>'."\n";  echo '  <td align="right"><font size="4"><b>'.(($nextNo)?('<a class="hidefocus" href="'.$PHP_SELF.'?no='.($nextNo).(($urlPath!=$urlPathOrg && $urlPath)?("&amp;path=".$urlPath):("")).'" onMouseUp="b(this);" hidefocus>weiter</a>'):('')).'</b></font></td>'."\n";  echo ' </tr><tr valign="middle">'."\n";  echo '  <td align="left"><font size="4"><b>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</b></font></td>'."\n";  echo '  <td align="center"><font size="3"><b>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</b></font></td>'."\n";  echo '  <td align="right"><font size="4"><b>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</b></font></td>'."\n";  echo ' </tr></table>'."\n";  echo '</td></tr><tr align="center" valign="middle"><td>'."\n";  echo ' <img src="'.$images[$fileNo].'" '.(($imgWidth)?('width="'.$imgWidth.'" '):'').(($imgHeight)?('height="'.$imgHeight.'" '):'').'alt="'.$imgAlt.'" title="'.$imgTitle.'">'."\n"; } else {  echo "<b>Keine Bilder!</b>"."\n"; } echo '</td></tr></table>'."\n"; echo "\n"; insertJS($jsCode);

// Unerlaubte Zeichen im Dateinamen maskieren (vorlaeufige Version) function urlescape($url) {  $trans=array(" "=>"%20","Ä"=>"%c4","ä"=>"%e4","Ö"=>"%d6","ö"=>"%f6","Ü"=>"%dc","ü"=>"%fc","É"=>"%c9","é"=>"%e9");  $url=strtr($url,$trans);  return $url; }

function upto($inp,$need,$offset=0) {  $a=mb_strrpos($inp,$need);  $a=substr($inp,$offset,$a-$offset);  return $a; }

// Funktionen um JavaScript-Code mit PHP einzubinden function startJS() { echo '<script type="text/javascript" language="JavaScript"><!--'."\n"; } function writeJS($jsCode) { echo $jsCode."\n"; } function endJS($noscript="") { echo '//--></script>'; if(!empty($noscript)) { echo '<noscript>'.$noscript.'</noscript>'; } echo "\n"; } function insertJS($jsCode,$noscript="") { startJS(); writeJS($jsCode); endJS($noscript); }

?>

</body> </html>

Das kann irgendwo liegen - nennen wir es /slide.php. Folgendes liegt im Bilderverzeichnis:

<?php

// -------------------- Seitendefinition -------------------- // $SHOW[xxx] koennen hier Standarddefinitionen ueberschreiben $SHOW["IndexDir"]="";

// -------------------- Systemdefinition --------------------

// Pfad+Name des Slideshow-Kernels $showCore=$_SERVER["DOCUMENT_ROOT"]."/slide.php";

// Wenn dieser nicht vorhanden: Abbruch if(is_file($showCore)) { @require($showCore); } else { echo "Programmabruch: Slideshow-Kernel nicht gefunden!<br>Program abortion: slideshow kernel not found!"; }

?>

Das Script speichert alle (darstelbaren) Bilder (also GIF, JEG & PNG) in einer Liste. Ist die Liste vorhanden, wird stattdessen diese genommen (z.B. um die Reihenfolge der Bilder zu ändern.

Die Kommentierung der weiteren Features spare ich mir hier aber ... ;-)

Gruß, Cybaer

--
Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!