PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Galerie



Antares
11.04.2006, 15:08
Hallo, ich habe mal wieder eine PHP Frage^^
Und zwar geht es um eine Galerie.
Ich möchte gerne einen Ordner auslesen, und alle in ihm sich befindlichen Bilder anzeigen lassen.
Das ist soweit auch kein Problem. Nur möchte ich es gerne so haben, dass jedes einzelne Bild in ein <td> Tag einer Tabelle kommt.
Wenn ich in so einen <td> Tag die Variable einfüge, die den Ordner ausgelsen hat, dann werden in diesesm Tag eben alle Bilder des Ordners angezeigt.
Ich möchte logischerweise nur ein Bild pro <td> angezeigt haben, also wie funktioniert das?

Hier nochmal der Code



<?php

$ordner="./bilder/";
$lesen = opendir ($ordner);
while($file = readdir($lesen))
{
if ($file != "." && $file != ".." && $file != "index.php") {

print "<img src=".$ordner."/".$file."><br>";
}
}
closedir($lesen);
?>


<table width="95%" border="2">
<tr>
<td width="200" height="200">1</td>
<td width="200" height="200">2</td>
<td width="200" height="200">3</td>
</tr>
<tr>
<td width="200" height="200">4</td>
<td width="200" height="200">5</td>
<td width="200" height="200">6</td>
</tr>
<tr>
<td width="200" height="200">7</td>
<td width="200" height="200">8</td>
<td width="200" height="200">9</td>
</tr>
<tr>
<td width="200" height="200">10</td>
<td width="200" height="200">11</td>
<td width="200" height="200">12</td>
</tr>
</table>


Danke schonmal im Vorraus.

drunken monkey
11.04.2006, 15:24
Ich würde dir einfach raten, die Tabelle aufzumachen und dann den PHP-Code zu schreiben:

<table width="95%" border="2">

<?php

$ordner="./bilder/";
$lesen = opendir ($ordner);
$i = 0;
while($file = readdir($lesen))
{
if ($file != "." && $file != ".." && $file != "index.php") {
if ($i % 3 == 0) { // Jedes dritte Mal
echo "<tr>"; // wird ein <tr>-Tag ausgegeben,
} // um eine neue Zeile anzufangen.

echo "<td><img src=".$ordner."/".$file."></td>"; // Das Bild wird in einer Zelle ausgegeben
$i++;

if ($i % 3 == 0) { // Jedes dritte Mal
echo "</tr>"; // wird das <tr>-Tag geschlossen,
} // damit nachher ein neues aufgemacht werden kann
}
}
if ($i % 3 != 0) { //Am Ende muss evtl. noch das letzte <tr>-Tag geschlossen werden
echo "</tr>";
}
closedir($lesen);
?>

</table>
Ich hoffe es ist richtig, nicht getestet, nur aus dem Kopf. http://www.multimediaxis.de/images/smilies/old/szuck.gif Aber dürfte passen, sonst wird sicher ohnehin gleich jemand über mich herfallen! :rolleyes:

AgentJG
11.04.2006, 16:15
Du könntest aber mit JS die <img>s dynamisch in die Zellen packen. (Jaa, ich weiß, blöde Idee^^)

Antares
11.04.2006, 18:01
Oja danke drunken monkey, klappt alles perfekt ; )

Aber eine Frage noch: Wie könnte ich eine Blätterfunktion realisieren?

Soll bedeuten, dass wenn die Galerie eine Bestimmte Anzahl an Bildern erreicht hat, die neuen Bilder in einer neuen Seite dargestellt werden.

axel
11.04.2006, 20:25
Eine frage kann noch mal jemand nen script posten wie das ganz aussähe mit einem Javascript das das dann halt links oben oder so kommt, bin begeisteter PHP + MYsql coder aber irgendwie stoße ich da an meine grenzen!!

Danke für den Code oben der ist echt klasse damit hatte ich 300 bilder in 2 sec in ner Table http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif

axel
11.04.2006, 21:03
<?php

$PfadThumbnails="./pic_old/tumb/";
$PfadBilder="./pic_old/";
$AnzahlThumbnailsProZeile=3;

if($Verzeichniszeiger=opendir($PfadThumbnails))
{
$Table="<table border=\"0\" cellpadding=\"2\" cellspacing=\"5\"><tr>";
$i=0;
while($Datei=readdir($Verzeichniszeiger))
{
if(substr($PfadThumbnails.strtolower($Datei), -4)==".jpg" || substr($PfadThumbnails.strtolower($Datei), -5)==".jpeg" || substr(strtolower($PfadThumbnails.$Datei), -4)==".gif" || substr($PfadThumbnails.strtolower($Datei), -4)==".png")
{
$Bilddaten=getimagesize($PfadBilder.substr($Datei, 3));
$Bildbreite=$Bilddaten[0];
$Bildhoehe=$Bilddaten[1];
$Thumbnaildaten=getimagesize($PfadThumbnails.$Datei);
$Thumbnailbreite=$Thumbnaildaten[0];
$Thumbnailhoehe=$Thumbnaildaten[1];
if($i%$AnzahlThumbnailsProZeile==0 && $i!=0)
{
$Table.="</tr><tr>";
}
$Table.="<td><a href=\"javascript:GrafikAnzeigen('".$PfadBilder.substr($Datei, 3)."', '".$Bildbreite."', '".$Bildhoehe."');\"><img border=\"0\" height=\"".$Thumbnailhoehe."\" src=\"".$PfadThumbnails.$Datei."\" title=\"Zum Vergrößern aufs Foto klicken\" width=\"".$Thumbnailbreite."\"></a></td>";
$i++;
}
}
$Table.="</tr></table>";
closedir($Verzeichniszeiger);
}

?>

<html>
<head>
<title>Grafik passend in einem PopUp Fenster öffnen (mit PHP)</title>
<script>
<!--

function GrafikAnzeigen(GrafikURL, Breite, Hoehe)
{
Fensteroptionen="toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0";

Grafikfenster=window.open("", "", Fensteroptionen + ',width=' + Breite + ',height=' + Hoehe);
Grafikfenster.focus();
Grafikfenster.document.open();
with(Grafikfenster)
{
document.write("<html><head>");
document.write("<title>Grafikanzeige</title>");
document.write("</head>");
document.write("<body leftmargin=\"0\" marginheight=\"0\" marginwidth=\"0\" topmargin=\"0\">");
document.write("<img border=\"0\" onclick=\"window.close();\" src=\""+ GrafikURL +"\" title=\"Zum Schließen auf das Foto klicken\">");
document.write("</body></html>");
}
}

//-->
</script>
</head>
<body>

<?php

echo $Table;

?>

</body>
</html>



den code habe ich von einer seite, aber irgendwie kann der die tumb's laden aber die anderen großen datein nicht ein Beispiel gibts auf http://klasse9bonline.kl.funpic.de/gallery.php

Es kamen auch noch mass Fehlermeldungen:


Warning: getimagesize(./pic_old/909_123404.jpg): failed to open stream: No such file or directory in /usr/export/www/vhosts/funnetwork/hosting/klasse9bonline/gallery.php on line 15

Warning: getimagesize(./pic_old/913_094524.jpg): failed to open stream: No such file or directory in /usr/export/www/vhosts/funnetwork/hosting/klasse9bonline/gallery.php on line 15

Warning: getimagesize(./pic_old/913_095950.jpg): failed to open stream: No such file or directory in /usr/export/www/vhosts/funnetwork/hosting/klasse9bonline/gallery.php on line 15

Warning: getimagesize(./pic_old/913_110206.jpg): failed to open stream: No such file or directory in /usr/export/www/vhosts/funnetwork/hosting/klasse9bonline/gallery.php on line 15

Warning: getimagesize(./pic_old/913_110246.jpg): failed to open stream: No such file or directory in /usr/export/www/vhosts/funnetwork/hosting/klasse9bonline/gallery.php on line 15

Warning: getimagesize(./pic_old/913_110507.jpg): failed to open stream: No such file or directory in /usr/export/www/vhosts/funnetwork/hosting/klasse9bonline/gallery.php on line 15
....

......


Warning: getimagesize(./pic_old/_harte_leben_eines_cs_zockers.jpg): failed to open stream: No such file or directory in /usr/export/www/vhosts/funnetwork/hosting/klasse9bonline/gallery.php on line 15

....


Warning: getimagesize(./pic_old/pert_im_Duplokasten.gif): failed to open stream: No such file or directory in /usr/export/www/vhosts/funnetwork/hosting/klasse9bonline/gallery.php on line 15

Warning: getimagesize(./pic_old/psoon.jpg): failed to open stream: No such file or directory in /usr/export/www/vhosts/funnetwork/hosting/klasse9bonline/gallery.php on line 15

Warning: getimagesize(./pic_old/eie___is_das_rutschig.jpg): failed to open stream: No such file or directory in /usr/export/www/vhosts/funnetwork/hosting/klasse9bonline/gallery.php on line 15

drunken monkey
11.04.2006, 23:26
Erstmal willkommen hier im Forum! :D Allerdings weiß ich nicht, was da der Fehler sein könnte, von Trivia wie nicht vorhandenem Verzeichnis/File (wie's ja in der Fehlermeldung steht) mal abgesehen. http://www.multimediaxis.de/images/smilies/old/1/nixweiss.gif


Oja danke drunken monkey, klappt alles perfekt ; )

Aber eine Frage noch: Wie könnte ich eine Blätterfunktion realisieren?

Soll bedeuten, dass wenn die Galerie eine Bestimmte Anzahl an Bildern erreicht hat, die neuen Bilder in einer neuen Seite dargestellt werden.
Bitte! http://stud3.tuwien.ac.at/~e0525225/drunkenmonkey/sigsmiley.gif

Und zur Blätterfunktion:

<table width="95%" border="2">

<?php

$ordner="./bilder/";
$lesen = opendir ($ordner);
$i = 0;
if (isset ($_GET['page'])) {
$bereich = $_GET['page'];
} else {
$bereich = 1;
}
$bereich *= 30; // Statt 30 Anzahl der Bilder pro Seite einfügen
while($file = readdir($lesen))
{
if ($file != "." && $file != ".." && $file != "index.php") {
if ($i >= $bereich) { // Falls die entsprechenden Bilder
break; // eingefügt wurden wird
} // die Schleife unterbrochen
if ($i >= ($bereich - 30) { // Nur im richtigen Bereich werden Bilder eingefügt
if ($i % 3 == 0) { // Jedes dritte Mal
echo "<tr>"; // wird ein <tr>-Tag ausgegeben,
} // um eine neue Zeile anzufangen.

echo "<td><img src=".$ordner."/".$file."></td>"; // Das Bild wird in einer Zelle ausgegeben
$i++;

if ($i % 3 == 0) { // Jedes dritte Mal
echo "</tr>"; // wird das <tr>-Tag geschlossen,
} // damit nachher ein neues aufgemacht werden kann
}
}
}
if ($i % 3 != 0) { //Am Ende muss evtl. noch das letzte <tr>-Tag geschlossen werden
echo "</tr>";
}
closedir($lesen);
?>

</table>
Sollte eigentlich funktionieren. http://www.multimediaxis.de/images/smilies/old/1/gruebel.gif
Mit Links auf "?page=2" usw. könntest du dann auf die weiteren Seiten verweisen.

Antares
12.04.2006, 00:17
Hm, danke vielmals, aber es gibt leider noch einen Fehler.



Parse error: syntax error, unexpected '{' in /usr/export/www/vhosts/funnetwork/hosting/myrpgsquare/main/galerie.php on line 20

Wenn ich dieses { entferne gibt es einen Fehler in Line 21.

drunken monkey
12.04.2006, 00:24
Hm, danke vielmals, aber es gibt leider noch einen Fehler.



Parse error: syntax error, unexpected '{' in /usr/export/www/vhosts/funnetwork/hosting/myrpgsquare/main/galerie.php on line 20

Wenn ich dieses { entferne gibt es einen Fehler in Line 21.
http://www.multimediaxis.de/images/smilies/old/1/gruebel.gif Kannst du mir sagen, welche Zeile das in deinem Code ist, bzw. ihn posten? Und welcher Fehler kommt in Zeile 21, wenn du's wegnimmst?

Antares
12.04.2006, 00:31
Momentan hab ich den Code noch 1 zu 1 kopiert.
Demnach ist Zeile 20 diese:



if ($i >= ($bereich - 30) { // Nur im richtigen Bereich werden Bilder eingefügt

Aber wäre es nicht unlogisch, wenn man dieses { entfernen würde?

drunken monkey
12.04.2006, 01:07
if ($i >= ($bereich - 30) { // Nur im richtigen Bereich werden Bilder eingefügt
Es gehört eine zweite Klammer zu, das war der einzige Fehler! >_< Jetzt wo ich die Zeile so sehe, ist's sofort klar! -_- Also:

if ($i >= ($bereich - 30)) { // Nur im richtigen Bereich werden Bilder eingefügt
Ich sollte schlafen gehen...

Antares
12.04.2006, 01:14
Jo Fehler behoben, alles klar danke ;)

Aber...gibt leider noch ein Problem :\

Angenommen ich habe die Zahl der Bilder, die Pro Seite angezeigt werden auf 6 gestellt, so werden auf Seite 1 6 Bilder angezeigt, soweit so gut.
Aber, wenn ich jetzt auf Seite 2 klicke (habe mal nen Link hinzugefügt "galerie.php?page=2")
dann werden die restlichen Bilder einfach an die 6 Bilder drangehängt, anstatt dass sich ne neue Seite mit den neuen Bildern (ohne die alten) öffnet. :confused:

Heißt ja, dass der Code funktioniert, nur sollte er eben dann die "alten" Bilder nicht anzeigen.

drunken monkey
12.04.2006, 11:33
Mein heißester Tipp ist, dass du Zeile 20 nicht auch geändert hast: dort gehört natürlich auch "6" statt "30" hin. Also die zum zweiten Mal ausgebesserte Zeile 20:

if ($i >= ($bereich - 6)) { // Nur im richtigen Bereich werden Bilder eingefügt
Dachte es sei klar, hätte es aber auch hinschreiben können. http://www.multimediaxis.de/images/smilies/old/szuck.gif

Antares
12.04.2006, 11:46
Ist mir später auch noch eingefallen, aber da war ich nicht mehr on.
Naja sorry :D

Aber danke nochmals für deine große Hilfe ;)

Jesus_666
12.04.2006, 19:00
Ich würde dir einfach raten, die Tabelle aufzumachen und dann den PHP-Code zu schreiben:
Ich möchte nur darauf hinweisen, daß so etwas grauenerregend schlechter Stil ist und unter allen Umständen vermieden werden sollte. Inline-Code ist das PHP-Äquivalent zu GOTO: Er führt sehr schnell zu einem unwartbaren Haufen Spaghetticode, den selbst der Autor nur noch mit Mühe entwirren kann. Frag' mal SDS, warum niemand die RMXP-Erweiterung für's Atelier schreiben wollte.

Wenn man mit PHP HTML-Code generiert sollte man Templates nutzen, wann immer das möglich ist. Mit Templates kann man ohne Probleme Interface und Programmlogik voneinander trennen - und sie sind gar nicht mal schwer umzusetzen.

Ein einfaches Templatesystem könnte so aussehen:


### Diesen Kram könnte man wunderbar in ein Include packen
<?php
// Lädt ein Template in einen String und escapt alle Anführungszeichen. Gibt
// FALSE zurück, wenn die gewünschte Datei nicht existiert
function load_template($file)
{
if (!is_file($file)) return false;
return str_replace('"','\"',implode('',file($file)));
}

// Diese Funktion nimmt den Content, wickelt ihn in eine Basisseite ein und
// schickt ihn an den Browser
function send_page($content, $basefile)
{
$template = load_template($basefile);
$template = str_replace('{CONTENT}', $content, $template);

echo stripslashes($template);
}
?>


Den Kram benutzt man dann so:


<?php
require('Die Datei da oben');

// Hier kommt Code, der eine Liste von Zeilen erzeugt, die wir brauchen.
// Beispielsweise Bild-URLs. Der Kram wird in $zeilen geschrieben.

// Wir laden das Template, das die einzelnen Zeilen darstellt
if (!$td_template = load_template('res/td.htm'))
die('zOMG, konnte das Template nicht finden!!1');
// Ein String, der hinterher die fertigen Tabellenzeilen beinhaltet
$zeilen_liste = '';

foreach ($zeilen as $url)
{
// Wir schreiben den URL dahin, wo beim Template {URL} steht und
// hängen das Ergebnis an die Liste an
$zeilen_liste .= str_replace('{URL}', $url, $td_template);
}

// Jetzt geben wir den Kram aus
send_page($zeilen_liste, 'res/gallerie.htm');
?>


Zum Schluß noch die beiden Templates:


### res/gallerie.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Galerie</title>
</head>
<body>
<table>
{CONTENT}
</table>
</body>
</html>

### res/td.htm
<tr><td><img src="{URL}" alt=""></td></tr>



Das ist an sich alles, was man für Templates braucht. Man kann in einem Template mehrere Variablen verbauen (die man dann ersetzt, indem man mehrmals str_replace() mit verschiedenen Werten drüber laufen läßt) und man kann Templates in Templates verschachteln und so komplexe Seitenlayouts umsetzen (indem man einfach eine durchgearbeitete Templatevariable nimmt und sie per str_replace() in eine andere einfügt) und hat damit alle Möglichkeiten, die man ohne Templates auch hat. Aber der Code ist sauber getrennt (zwischen HTML und PHP) und man hat später kaum Schwierigkeiten, den Kram zu warten.

Und ja, man sollte für jedes kleine poplige Projekt Templates verwenden (zumindest solange es HTML ausgibt). Wenn man sie nicht verwendet gewöhnt man sich daran, sie nicht zu verwenden und tut da irgendwann auch in einer Seite, die man (oder gar jemand anders) später noch mal warten können muß. Und das kann einem die Arbeit nur schwerer machen.

drunken monkey
12.04.2006, 19:28
...Bahnhof...billige Zahnpasta...
:eek: ZOMG, ich verstehe kein Wort! :eek:
Nein, im Ernst: ich hatte keine Ahnung, dass sowas überhaupt geht, ich habe einfach nur den einfachsten Code, der mir eingefallen ist genommen. Und genau das sind dann die Sachen, die gute Programmierer von Leuten trennen, die bloß funktionierende Sachen hinfetzen.

Vielen Dank, du hast meinen Horizont erweitert! http://www.multimediaxis.de/images/smilies/old/sm_12.gif Fast so wie die Leute, die mir nach meiner ersten Homepage eine "Feuertaufe" verpasst haben! ;)

Aber am Anfang habe ich echt kein Wort verstanden. http://www.multimediaxis.de/images/smilies/old/szuck.gif Jetzt habe ich's mir nochmal genau durchgelesen und kapiere immerhin halbwegs, um was es geht, vielen Dank! ;)

Jesus_666
12.04.2006, 21:09
Freut mich, daß ich dir was vermitteln konnte. Templates sind in PHP wirklich einfach umzusetzen und sie sind verdammt praktisch. (Rate mal, wie man wechselbare Seitendesigns mit wenig Aufwand hinkriegt...)

Antares
13.04.2006, 19:24
@Jesus_666

Also der erste PHP Code wird includet, soweit klar.
Aber wo kommt mein Code hin ?


<?php

$ordner="./bilder/";
$lesen = opendir ($ordner);
while($file = readdir($lesen))
{
if ($file != "." && $file != ".." && $file != "index.php") {

print "<img src=".$ordner."/".$file."><br>";
}
}
closedir($lesen);
?>

rgb
13.04.2006, 20:27
Freut mich, daß ich dir was vermitteln konnte. Templates sind in PHP wirklich einfach umzusetzen und sie sind verdammt praktisch. (Rate mal, wie man wechselbare Seitendesigns mit wenig Aufwand hinkriegt...)
Mir konntest du auch was vermitteln.
klingt ja recht interessant mit den Templates. Und gut, dass ich das hier gelesen habe, bevor ich mit der Überarbeitung / komplett-neu-Schreibung meiner Homepage angefangen habe:).