Gå til innhold

[Løst] Hjelp til å skrive ut html-string med loop


Anbefalte innlegg

Hei, jeg har en mappe med bilder som skal skrives ut til en side. Etter et kjapt google søk fant jeg dette. Denne koden fungerer fint, men den mangler litt funksjonalitet.

$dir = "/var/www/img/*.jpg";
//get the list of all files with .jpg extension in the directory and safe it in an array named $images
$images = glob( $dir );

//extract only the name of the file without the extension and save in an array named $find
foreach( $images as $image ):
    echo "<img src='" . $image . "' />";
endforeach;

Jeg ønsker to mapper, en som inneholder miniatyrbilder med samme navn + en ending. Og en med høyoppløste bilder. Det skal være en link til det store bilde som skal poppe opp i en "lightbox" når du trykker på miniatyrbildet.

 

et bilde vil da se slik ut i html.

<a href="Bilder/1.jpg" data-lightbox="1"><img data-lightbox="1" src="Bilder_min/1_min.jpg" /></a>
--------
Mappestruktur:
* Bilder/1.jpg
* Bilder_min/1_min.jpg   // "_min" kan selvfølgelig sløyes på selve bildet, men dette er noe jeg ikke ønsker.

Jeg har forsøkt å redigere echo setningen minst 20 ganger, men resultatet blir at jeg ikke får opp et eneste bilde.

 

Dette er det jeg har forsøkt meg på til nå, men ingenting dukker opp. Her mangler jeg også miniatyrbilde funksjonen.

$dir = "Bilder/*.jpg";
//get the list of all files with .jpg extension in the directory and safe it in an array named $images
$images = glob( $dir );

//extract only the name of the file without the extension and save in an array named $find
foreach( $images as $image ):
    echo "<a href='". $image ."'<img src='" . $image . "' /></a>";
endforeach;

Endret av martin808
Lenke til kommentar
Videoannonse
Annonse

Prøv noe sånt som:

 

 

 

echo '<a href="Bilder/'.$image.'" data-lightbox="1"><img data-lightbox="1" src="Bilder_min/'.str_replace('.', '_min.', $image).'" /></a>'.PHP_EOL;

Har ikke testet denne, men det burde funke...

 

Ville brukt anførselstegnene omvendt av deg, " (doble) til HTML, og ' (enkle) til PHP. Kan ikke komme på hvorfor i farten, men jeg er sikker på det er en god grunn :)

Bruken av String Replace (str_replace) er kanskje ikke optimalt, men du trenger noe som kan føye til _min foran .jpg, så vi kan søke etter punktumet og erstatte det med noe annet.

 

edit:

Alternativt kan du bygge ut funksjonen med en scan av begge mappene i hvert sitt steg (Bilder og Bilder_min) og hatt en if inni foreach slik at du bare viser bilder som har en makker. Dvs, du tester om det finnes en miniversjon, har du glemt å lage den får du dermed ikke en død link, den bare hopper over akkurat den... og sier tydelig fra, som i eksempelet under :)

det ville blitt noe sånt som (pseudo-kode):

$errors = array();
foreach ($images as $image) {
 if (in_array(basename($image)).'_min', $thumbnails) {
  echo '...'; // Her putter du inn HTML'en din
 }
 else {
  $errors[] = $image; 
 }
}

// Lag en liste til slutt over bilder som ikke har en miniversjon
if (!empty($errors)) {
 foreach ($errors as $error) {
  echo 'Du har glemt å lage en thumbnail av '.$error.'!<br />'.PHP_EOL;
 }
}





Ikke så effektivt, da det involverer et søk (in_array) for hvert eneste bilde. En raskere løsning vil være å slå sammen de to scanningene til ett array...

 

Lykke til!

Endret av -HaavardH-
  • Liker 1
Lenke til kommentar
^

Hei koden du postet først fungerte med noen små modifikasjoner.

echo '<a href="Bilder/'.$image.'" data-lightbox="1"><img data-lightbox="1" src="Bilder_min/'.str_replace('.', '_min.', $image).'" /></a>'.PHP_EOL;

/*
$image == Bilder/<bilde1.jpg>
Derfor lagde jeg en Bilder mappe inne i Bilder_min. 
Mappestruktur
Bilder
    bilde01.jpg
Bilder_min
   Bilder
      bilde01_min.jpg

Da ble koden slik
*/

echo '<a href="'.$image.'" data-lightbox="1"><img data-lightbox="1" src="Bilder_min/'.str_replace('.', '_min.', $image).'" /></a>'.PHP_EOL;

Tuen takk for at du tok deg tid til å svare.

Endret av martin808
Lenke til kommentar

Hei igjen!

Så bra at du fikk det til å fungere :)

 

Ikke dumt å lage til mappene så det fungerer med koden, men det er heller ikke så vanskelig å gjøre den litt om slik at du får en logisk mappestruktur også, f.eks:

 

Bilder

- Bilde1.jpg

- Bilde2.jpg

- Mini

-- Bilde1_min.jpg

-- Bilde2_min.jpg

 

 

Da kan du prøve denne kodesnutten her, hvor str_replace er bygd ut til å søke etter to forskjellige ting :

$search = array('.', 'Bilder/');
$replace = array('_min.', 'Bilder/Mini/');

foreach ($images as $image) {
 echo '<a href="'.$image.'" data-lightbox="1"><img data-lightbox="1" src="'.str_replace($search, $replace, $image).'" /></a>'.PHP_EOL;
}



Igjen, jeg har ikke prøvd den ut, men det burde funke :wee:Endforeach; kan du stryke i så fall

Endret av -HaavardH-
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...