login  Naam:   Wachtwoord: 
Registreer je!
 Forum

5 random foto's uit map en submappen (Opgelost)

Offline woms - 29/04/2008 17:03
Avatar van womsNieuw lid Yah.. de titel zegt het al.. Hoe kan ik dat doen?
Ik heb een map met submappen met daarin foto's. Nu wil ik bij elke refresh 5 random foto's laten zien.
Als ik een submap toevoeg, dan wil ik niet iets veranderen in de php file..

Nu heb ik dit, maar dan moet ik nog submappen toevoegen in de php file en hij laat maar 1 foto zien:
  1. //2006
  2. $map[16] = "./fotoalbum/Jaar 2006/Amusing Hengelo 3-6-2006/thumbs/";
  3. $map[17] = "./fotoalbum/Jaar 2006/Jaarfeest 2-7-2006 map 1/thumbs/";
  4. $map[18] = "./fotoalbum/Jaar 2006/Jaarfeest 2-7-2006 map 2/thumbs/";
  5. //2007
  6. $map[22] = "./fotoalbum/Jaar 2007/Jaarfeest 1-7-2007/thumbs/";
  7. $map[23] = "./fotoalbum/Jaar 2007/Nationaal Vocaal Festival 2007 Hengelo/thumbs/";
  8. $map[24] = "./fotoalbum/Jaar 2007/Opendag 'de Bond' 1-9-2007/thumbs/";
  9.  
  10. srand ((float) microtime() * 10000000);
  11. $random = array_rand($map);
  12. $map= $map[$random];
  13. $dir = opendir($map);
  14.  
  15. // Haal de gegevens uit dir
  16. while(false !== ($file = readdir($dir)))
  17. {
  18. if(($file !== ".") && ($file !== ".."))
  19. {
  20. list($filename, $ext) = explode(".", $file);
  21. $ext = strtolower($ext);
  22. if(($ext == "jpg") || ($ext == "png") || ($ext == "gif"))
  23. {
  24. $afbeelding[] = $file;
  25. }
  26. }
  27. }
  28. closedir($dir);
  29.  
  30. // Telt aantal afbeeldingen in map en maakt een random getal uit dat aantal.
  31. $aantal = count($afbeelding) - 1;
  32. $rand = mt_rand(0, $aantal);
  33. echo "<img style=\"height:75px;margin-left:5px;margin-right:5px;border:1px solid #666;\" src=\"".$map."".$afbeelding[$rand]."\" alt=\"".$afbeelding[$rand]."\"/>";

5 antwoorden

Gesponsorde links
Offline Martijn - 29/04/2008 17:50
Avatar van Martijn Crew PHP
  1. $i=0;
  2. while($i<5){
  3. $rand = mt_rand(0, $aantal);
  4. echo "<img style=\"height:75px;margin-left:5px;margin-right:5px;border:1px solid 666;\" src=\"".$map."".$afbeelding[$rand]."\" alt=\"".$afbeelding[$rand]."\"/>";
  5. $i++;}


for ipv while zou wat netter zijn
Offline woms - 29/04/2008 18:07 (laatste wijziging 29/04/2008 18:19)
Avatar van woms Nieuw lid Bedankt man! Dat kon ik ook wel verzinnen eigenlijk, als ik het zo zie 

Maar nu nog dat hij ook submappen doorzoekt?
ipv dit:
  1. //dit is trouwens maar een deeltje van de mappen :)
  2. //2006
  3. $map[16] = "./fotoalbum/Jaar 2006/Amusing Hengelo 3-6-2006/thumbs/";
  4. $map[17] = "./fotoalbum/Jaar 2006/Jaarfeest 2-7-2006 map 1/thumbs/";
  5. $map[18] = "./fotoalbum/Jaar 2006/Jaarfeest 2-7-2006 map 2/thumbs/";
  6. //2007
  7. $map[22] = "./fotoalbum/Jaar 2007/Jaarfeest 1-7-2007/thumbs/";
  8. $map[23] = "./fotoalbum/Jaar 2007/Nationaal Vocaal Festival 2007 Hengelo/thumbs/";
  9. $map[24] = "./fotoalbum/Jaar 2007/Opendag 'de Bond' 1-9-2007/thumbs/";
  10. srand ((float) microtime() * 10000000);
  11. $random = array_rand($map);
  12. $map= $map[$random];

dat hij automatisch al in de submappen kijkt..
Offline Martijn - 29/04/2008 18:28
Avatar van Martijn Crew PHP sorry, daar ben ik niet bekent mee. Wat je zou kunnen doen om het random te houden, is een array maken met daarin de link naar elk bestand, ongeacht de submap. en dan een count($array) erover doen, en dat word dan de max van je rand 
Offline Ibrahim - 30/04/2008 12:48
Avatar van Ibrahim PHP expert Ik heb een suggestie. Lees het even door, en zet het idee in je hoofd. Bekijk dan of je het wel wil gebruiken.

Je hebt nu alle fotoalbums in een array zitten genaamd $map. Wist je dat PHP door mappen heen kon zoeken?

Als jij een basedir in een string zet, PHP door die basedir laat zoeken naar fotoalbums, dan hoef je dat niet meer manueel in je PHP code te zetten. Je constructie zou dan zo zijn:

  1. ./root
  2. ./public
  3. ./fotoalbums
  4. ./fotoalbum-1
  5. ./originals
  6. ./thumbs
  7. ./fotoalbum-2
  8. ./originals
  9. ./thumbs


Zo zie je dat ik in de root van de website een map public heb gemaakt. Daarin zie je een map fotoalbums. Dit is dus je basedir:

  1. $baseDir = '/root/van/je/host/public_html/public/fotoalbums/';


Daarna zie je dat in de map fotoalbums een aantal mappen zitten. Dat zijn je fotoalbums. Die zijn variabel, dus hoef (of beter mag) je niet in je code neer te planten. PHP zal dat voor ons automatisch in een array zetten. Wat PHP ook doet, is 2 entries in de array zetten waar we niets aan hebben. Laten we die verwijderen.

  1. $myPhotoAlbums = scandir($baseDir);
  2. $myPhotoAlbums = array_flip($myPhotoAlbums);
  3.  
  4. unset($myPhotoAlbums['.'], $myPhotoAlbums['..']);
  5.  
  6. $myPhotoAlbums = array_flip($myPhotoAlbums);


Nu hebben we alle fotoalbums in een array. Nu kun je random een paar foto's selecteren door array_rand te gebruiken. Eerst moet je wel alle foto's van alle albums in een aparte map verzamelen. Na dit kun je het wel verder zelf.

Succes
Offline woms - 30/04/2008 12:52
Avatar van woms Nieuw lid Dankjewel! Ik zocht idd iets dat in submappen kijkt. Nu kom ik er wel uit
 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.211s