PHP Zufällige Bilder wieder geben ?!?!

PEASANT KING

Commander
Registriert
Okt. 2008
Beiträge
2.412
Moin Leute,

hier mal Code soweit:
PHP:
<?php
$thumb = "images/library/thumbnails";
$dir = "images/library";
echo '<link rel="stylesheet" href="modules/mod_imagelibrary/layout.css" type="text/css" />';

//Thumbnail Anzeige

if (is_dir($thumb))
{
    if ( $handle = opendir($thumb) )
    {
    $counter = 0;
    while (false != ($file = readdir($handle)) AND $counter <= 4) 
        {
        if($file != "." && $file != "..")
         {
         $images = array($file);
         foreach ($images as $image)        
              {
              echo '<a href="'.$dir.'/'.$image.'"><img src="'.$thumb.'/'.$image.'"></a><br/>';
              }
        }
        $counter++;
        }
    }    
    closedir($handle);
}

?>

Der Code stellt ein kleines Modul dar, was ich für Joomla geschrieben habe. Es funktioniert auch leider versteh ich nicht ganz wie ich 3 Bilder immer zufällig ausgeben kann.
Ich habe es mit shuffle(); und rand(); versucht nur leider stehe ich auf dem Schlauch, dass funktionierend in mein Script einzubauen, hat vielleicht einer einen Tipp für mich.
 
Du könntest erstmal schauen wieviele bilder du insgesamt hat, danach eine zufällige zahl von 1 bis x generieren und diese mit dem bildnamen, z.b. bildx.jpg kombinieren (bild003.jpg, bild144.jpg, bzw. bild1 = "bild".$index.".jpg"; ).
natürlich müsstest du noch prüfen, ob die zahl doppelt generiert wurde und ggf. neu generieren lassen.
danach kannst du dir die 3 zufälligen bilder anzeigen lassen.
das wäre für mich jetzt die einfachste methode, es gibt aber bestimnmt noch elegantere möglichkeiten.
 
Hallo,

ich vermute du gehst davon aus, dass in $images schon sämtliche Bilder sind, dem ist aber nicht so.

Am besten wäre es, du würdest $images mit array_push füllen in der while Schleife, Shufflen und die Ausgabe der foreach Schleife unter die while Schleife setzen.
 
Mach doch mit Random und dann Zahlen von 1 bis irgendwas und danach Switch Case. Die zufällige Zahl ruft danach das Bild auf das dort in dem Case gespeichert ist.

Ich hoffe du verstehst wie ich meine :)
 
PHP:
if ( $handle = opendir($thumb) )
    {
    $counter = 0;
	$images = array();
    while (false != ($file = readdir($handle)) AND $counter <= 4) 
        {
        if($file != "." && $file != "..")
        {
         array_push($images, $file);
        }
        $counter++;
        }
    }    
    closedir($handle);
	shuffle($images);
	foreach ($images as $image)        
    {
       echo '<a href="'.$dir.'/'.$image.'"><img src="'.$thumb.'/'.$image.'"></a><br/>';
    }

Sollte deinen Zweck erfüllen
 
Ich hab mir mal nen Code zum Testen aus dem Inet gezogen...
Es funktioniert wunderbar, wenn ich es direkt aufrufe, innerhalb eines Divs bekomme ich allerdings immer folgedenden Fehler:
Array ( )
Warning: array_rand() [function.array-rand]: Second argument has to be between 1 and the number of elements in the array in C:\xampp\htdocs\ll\beratung\modules\mod_imagelibrary\mod_imagelibrary.php on line 4

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\ll\beratung\modules\mod_imagelibrary\mod_imagelibrary.php on line 5

Hier der Code dazu:
PHP:
$bilder   = glob( "zufallsbilder/*.jpg" );
$bild     = array_rand( $bilder, 3 );
foreach ($bild as $zufallsbild)
{
    $bildinfo = getimagesize( $bilder[$zufallsbild] );
    echo '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. ' />';
}
Langsam verzeifel ich echt daran...

Danke Krafty, leider wechselt der nur die Reihenfolge der drei Bilder die angezeigt werden sollen.
Es soll aber zwischen allen Bildern die im Verzeichnis liegen 3 ausgesucht werden und dann angezeigt werden.
 
Zuletzt bearbeitet:
Ok, kein Problem, dann hebst du oben die Limitierung auf, lädst also alle Bilder, dann erzeugst du 3 Zufallszahlen und nimmst sie als entsprechenden Index von $images.

Habe da mal wieder etwas vorbereitet... ^^
PHP:
if ( $handle = opendir($thumb) )
    {
	$images = array();
    while (false != ($file = readdir($handle))) 
        {
        if($file != "." && $file != "..")
        {
         array_push($images, $file);
        }
        }
    }    
    closedir($handle);
	// shuffle($images);
	$zahlen = array();
	$count=0;
	while($count < 3)
    {
		$zahl = rand(0, count($images));
		if (!in_array($zahl, $zahlen))
		{
			array_push($zahlen, $zahl);
			$count++;
		}
    }
	foreach ($zahlen as $zahl)        
    {
       echo '<a href="'.$dir.'/'.$images[$zahl].'"><img src="'.$thumb.'/'.$images[$zahl].'"></a><br/>';
    }
 
Ich danke dir Krafty, dieses mistige Problem hat mich den ganzen Vormittag rumgequält ^^ ich hab immer diesen dämlichen Error wie oben zu sehen bekommen mit meinen Ausführungen.
 
Mir fällt gerade auf, dass du $zahl = rand(0, count($images)); durch $zahl = rand(0, count($images)-1); ersetzen solltest, sonst kannst du außerhalb des Bereiches landen.
 
Muss nochmal nerven, ich weiß heut ist nen schwerer Tag für mich hab ne totale Blockade bitte verzeit mir ^^.
Also die Geschichte läuft jetzt so wie ich es mir gedacht habe. Nochmals danke an Krafty, allerdings bin ich irgendwie zu blöd um ne Lösung zu finden, damit wenn ich auf ein Bild klicke, das Bild auf meiner Seite erscheint im Template anstatt ne blanke Seite nur mit dem Bild anzuzeigen.
 
Um dir bei diesem Problem helfen zu können, müsstest du schon das Template hier Posten. Du hast zwei Möglichkeiten, entweder du legst deine Zufallsfunktion in einer PHP Datei, die du entsprechend in den Template per include (http://www.php-space.info/php/space/include-in-php.php) einbindest oder fügst diesen Code an der Stelle eines Template ein.
 
So wie ich das verstehe müsste ich ja dann die komplette index.php des Templates includen.
So ganz will das aber nicht in meinen Kopf rein, da die Zufallsbildergalerie auf der rechten Seite im Template liegt und wenn ich dann ein Bild anklicke soll sich die Fotogalerie öffnenaber innerhalb des Templates, also nicht auf einer blanken Seite, wo nur das Bild zu sehen ist.

Hier mal der Code der index.php meines Templates:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html  xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
    <jdoc:include type="head" />
    <link rel="stylesheet" href="templates/beratung/css/layout.css" type="text/css" />
</head>

    
<body>
    <div id="wrapper">
        <div id="header"></div>
        <div id="navigation">
            <div class="navi_left"></div>
                <div id="navi_back">
                    <div id="navi_main">
                        <jdoc:include type="module" name="mainmenu" />
                    </div>
                    <div id="search">
                        <jdoc:include type="modules" name="search" />
                    </div>
                </div>        
            <div class="navi_right"></div>
        </div>
                <div id="content_wrapper">
                        <div class="left_panel">
                            <jdoc:include type="module" name="left_panel" />
                        </div>    
                        </div>
                        <div class="content_main">
                            <jdoc:include type="modules" name="news" />
                            <jdoc:include type="component" />
                            <jdoc:include type="modules" name="contact" />                        
                        </div>    
                        <div class="right_panel">
                            <p><a href="http://localhost/beratung/impressum">Zur Fotogalerie</a></p>
                            <jdoc:include type="modules" name="gallery" />
                        </div>
                </div>    
                <div id="footer">
                    <div class="footer_text">
                        <p>Layout under Copyright 2010© by ****</p>
                    </div>
                    <div class="footer_menu">
                        <a href="http://localhost/beratung/impressum">Kontakt</a>
                        <a href="http://localhost/beratung/impressum">Impressum</a>
                    </div>    
                </div>
</body>
    
</html>
Die Galerie wird im right_panel angezeigt.
 
Was für ein Content Managementsystem verwendest du? Dies ist vom System zu System anders und es gibt immer unterschiedliche Lösungen. Vermutlich wird bei deinen Script kein PHP-Code im Template System ausgeführt, da müsstest du dich erstmal schlau machen.
 
Doch doch ich kann ja mal ein Bild anhängen um es noch mehr zu verdeutlichen. Die Galerie wird ja auch angezeigt.
Alles kein Thema, ich möchte lediglich das wenn ich in der Gelerie links auf ein Bild klicke, das sich die Galerie ganz aufmacht im Contentbereich meiner Seite.
 

Anhänge

  • beratung.jpg
    beratung.jpg
    116,1 KB · Aufrufe: 164
Zurück
Oben