Unterordner einbeziehen Random Image

Echt Klasse das du dich mir annimmst. Das erste Mal das sich jemand im Netz so engagiert um mich kümmert. Danke nochmal gerade jetz wo das Ziel immer näher rückt :)

Hab ein kleines zufallsscript versucht anzufügen, da ja aus der neu gewonnenen BilderListe mehrere Bilder zufällig angezeigt werden sollen. Wie einer Bildrotation eben.

PHP:
// no direct access
defined( '_VALID_MOS' ) or die( 'Restricted access' );

global $mosConfig_absolute_path, $mosConfig_live_site;

$type 			= $params->get( 'type', 'jpg' );
$folder 		= $params->get( 'folder' );
$link 			= $params->get( 'link' );
$width 			= $params->get( 'width' );
$height 		= $params->get( 'height' );
$the_array 		= array();
$the_image 		= array();

// if folder includes livesite info, remove
if ( strpos($folder, $mosConfig_live_site) === 0 ) {
	$folder = str_replace( $mosConfig_live_site, '', $folder );
}
// if folder includes absolute path, remove
if ( strpos($folder, $mosConfig_absolute_path) === 0 ) {
	$folder= str_replace( $mosConfig_absolute_path, '', $folder );
}
// if folder doesnt contain slash to start, add
if ( strpos($folder, '/') !== 0 ) {	
	$folder = '/'. $folder;
}
// construct absolute path to directory
$abspath_folder = $mosConfig_absolute_path . $folder;

function search4Picture( $folder, $picturelist = array() )
{
    $dir = dir($folder);
    while( $file = $dir->read() ) {
        if( preg_match('/^\./', $file) ) continue;   // Eintrag mit . am Anfang
        $realpath = sprintf( "%s/%s", $folder, $file );

        if( is_dir($realpath ) ) {
            $picturelist = search4Picture( $realpath, $picturelist );
        }


        if( is_file($realpath) ) {
            $image_info = getimagesize( $realpath );
            switch( $image_info[ 2 ] ) {
                case 1:            // Type = gif
                case 2:            // Type = jpeg
                case 3:            // Type = png
                    $picturelist[] = $realpath;
                break;
                default:            // Type = kein Bild, also nix machen
                break;
            }
        }
    }
    $dir->close();

    return $picturelist;
}

$alleBilder = search4Picture( realpath('components/com_comprofiler/enhanced/gallery/images/') );  

echo "<pre>";
echo "Alle gefundenen Bilder:\n";
print_r($file);
echo "</pre>";  
		  	

$bildarray = $the_array();
if (!is_dir($file)) {
array_push($the_array, $file);

}

$rand_var = array_rand($the_array, 3);
for($x = 0; $x < count($rand_var); $x++)

{

echo "$bildarray[$rand_var[$x]] . "\">";
?>
 
Wenn du nun aus der Liste ein zufälliges Auswählen willst, nimmst du den Array, in dem alle Bilder drin sind, kalkulierst die Länge, und lässt den Zufallswert anhand 1 bis Länge auswählen. Danach stellst du das Bild einfach nur noch dar. Ein weiteres Prüfen ist nicht notwendig, da die Prüfung schon in der rekursiven Funktion durch geführt werden. Hier ergibt sich aber nun ein kleines Problem, da die Bilder in dem Array absolute Pfade sind. Das kannst du einfach durch eine Ersetzung beheben.

PHP:
$random_value = mt_rand(1, sizeof($alleBilder));

echo '<img src="'.str_replace(getcwd(), '', $alleBilder[$random_value] ).'"/>';


getcwd() liefert den derzeitig verwenden Pfad zurück. Dieser wird aus der absoluten Pfadangabe ausgeschnitten und schon haste die relative Pfadangabe zur Datei.
 
Habe die Anzeige mehrer Bilder erstmal so gelöst.
Nicht elegant aber es klappt

PHP:
$random_value = mt_rand(1, sizeof($alleBilder));
echo '<img src="'.str_replace(getcwd(), '', $alleBilder[$random_value] ).'"/>'; 

$random_value2 = mt_rand(1, sizeof($alleBilder));
echo '<img src="'.str_replace(getcwd(), '', $alleBilder[$random_value2] ).'"/>'; 

$random_value3 = mt_rand(1, sizeof($alleBilder));
echo '<img src="'.str_replace(getcwd(), '', $alleBilder[$random_value3] ).'"/>'; 

$random_value4 = mt_rand(1, sizeof($alleBilder));
echo '<img src="'.str_replace(getcwd(), '', $alleBilder[$random_value4] ).'"/>';

Bei einigen Bildern sprengt das Script die Tabelle. Gibt es eine Möglichkeit die Bilder bei der Ausgabe auf eine einheitliche Größe zu normen ?

Am Ende der Rotation kommt noch die Meldung cannot redeclare search4picture.
Dieses Problem hatte ich schon öfter und kommt doch daher das falsch includiert wird oder ? Nur gibts ja kein Include Befehl im Script, sodass es mit include_once ja nicht einfach getan ist. So ging es sonst immer irgendwie :)
 
Zuletzt bearbeitet:
Super Geil mit Include hat es schonmal geklappt ! Hammer Dank.

Meine 4x mal Kopieraktion von
PHP:
$random_value1 = mt_rand(1, sizeof($alleBilder));
echo '<img src="'.str_replace(getcwd(), '', $alleBilder[$random_value1] ).'"width="150" height="110"';
war dann doch nich do der Knaller. Über den Bildern ein klaffendes weißes Loch und irgendwie ist die Anzahl der angezeigten Bilder nicht konstant, von 1-4 alles dabei :)

so sieht es aus:
 

Anhänge

  • Bild 1.jpg
    Bild 1.jpg
    9,5 KB · Aufrufe: 26
Zuletzt bearbeitet:
Sooo jetz geht alles. Hab den Fehler gefunden, waren ein paar <br> zuviel :)

Hey Ich verbeuge mich vor dir. Bin dir super Dankbar das du mir so prima geholfen hast.
War ja auch ne schwere Geburt
 
Zurück