Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Proszę o poradę listowanie katalogu
Forum PHP.pl > Forum > Przedszkole
JaQu
Buduję galerie na lightbox2

Na stronie gdzie dodaje się linki do plików zastosowałem listowanie katalogu.

Kod:

  1.  
  2. <?PHP
  3. $katalog = @dir('galeria/images') or die ("Nie można listować");
  4. while ($plik_kat = $katalog->read())
  5. {
  6. echo "<a href='galeria/images/$plik_kat' rel='lightbox'><img src='galeria/images/$plik_kat' alt=''></a<BR>";
  7. }
  8. $katalog->close();
  9. ?>
  10.  


Listowanie działa, generuje ładnie kolejne linku z plikami, ale dorzuca też jako link katalogi które są w środku oraz katalog główny ("images)

strona generuje taki kod:

  1.  
  2. <a href='galeria/images/bullet.gif' rel='lightbox'><img src='galeria/images/bullet.gif' alt=''></a><BR><a href='galeria/images/..' rel='lightbox'><img src='galeria/images/..' alt=''></a><BR><a href='galeria/images/loading.gif' rel='lightbox'><img src='galeria/images/loading.gif' alt=''></a><BR><a href='galeria/images/close.gif' rel='lightbox'><img src='galeria/images/close.gif' alt=''></a><BR><a href='galeria/images/nextlabel.gif' rel='lightbox'><img src='galeria/images/nextlabel.gif' alt=''></a><BR><a href='galeria/images/prevlabel.gif' rel='lightbox'><img src='galeria/images/prevlabel.gif' alt=''></a><BR><a href='galeria/images/closelabel.gif' rel='lightbox'><img src='galeria/images/closelabel.gif' alt=''></a><BR><a href='galeria/images/.' rel='lightbox'><img src='galeria/images/.' alt=''></a><BR><a href='galeria/images/download-icon.gif' rel='lightbox'><img src='galeria/images/download-icon.gif' alt=''></a><BR><a href='galeria/images/donate-button.gif' rel='lightbox'><img src='galeria/images/donate-button.gif' alt=''></a><BR><a href='galeria/images/zdjecia' rel='lightbox'><img src='galeria/images/zdjecia' alt=''></a><BR><a href='galeria/images/image-1.jpg' rel='lightbox'><img src='galeria/images/image-1.jpg' alt=''></a><BR><a href='galeria/images/thumb-1.jpg' rel='lightbox'><img src='galeria/images/thumb-1.jpg' alt=''></a><BR>
  3.  


jak widać listowane są również katalogi np drugi link a
Proszę o rade jak zmienić kod aby listowało tylko pliki np .jpg i bez katalogów

Bardzo dziękuje
lobopol
  1. foreach (katalog/*.{jpg,gif,jpeg,png}', GLOB_BRACE) as $filename) {
  2.   echo realpath($filename);
  3. }
benio101
Ja bym sprawdził, czy $plik_kat jest na pewno plikiem poprzez funkcję is_file. Tylko przy zwróconym true wykonałbym echo. // Dodałem ifkę, linie 4,6
  1. <?PHP
  2. $katalog = @dir('galeria/images') or die ("Nie można listować");
  3. while ($plik_kat = $katalog->read()){
  4. if(is_file($plik_kat)){
  5. echo "<a href='galeria/images/$plik_kat' rel='lightbox'><img src='galeria/images/$plik_kat' alt=''></a<BR>";
  6. }
  7. }
  8. $katalog->close();
  9. ?>
Gość
Szybka odpowiedź, dzieki, niespodziewałem sie.

Jestem noga w skłądni jezyka php czasem coś przerobie ale nie do końca go kumam,

Bardzo proszę o wstawienie kody jak to ma wyglądać w takim razie gdzie użyć twojego kodu smile.gif <proszę nisko>
Gość
benio101

Wrzuciłem twój kod niestety teraz strona niew zwraca żadnych linków
lobopol
Jego metodą to
  1. if(is_file('galeria/images/'.$plik_kat)){
Gość
teraz działą dzieki lobopol.

Teraz bede pracował nad tym żeby csały skrypt pobie raz nazwe plików z jednego katalogu i drugą nazwe z innego katalogu.

i generował linki

  1. <a href='galeria/katalog1/nazwa1.jpg' rel='lightbox'><img src='galeria/katalog2/nazwa2.jpg' alt=''></a>



a najlepiej jak by było aby potrafił połączcz ze sobą w linku pliki np plik1.jpg i thumb_plik1.jpg
lobopol
A co za filozofia? Podmień w img images na nazwę drugiego katalogu a przed $plik_kat dodaj thumb_
  1. echo "<a href='galeria/images/$plik_kat' rel='lightbox'><img src='galeria/images/$plik_kat' alt=''></a<BR>";
jaqu
No tak logiczne. Dzięki

Myślałem, że będe musiał listować drugi katalog i jakoś to sklejać potem

P.S Sorka za zmiany moich loginów w tym wątku. ale teraz sie zarejestrowałem własnie i juz będe występował jako "jaqu".

Jeszcze pytanie jak to
  1. if(is_file('galeria/images/'.$plik_kat)){


zmienić aby nie pisać tego "galeria/images" defakto drugi raz. Już to zdefiniowałem jako zmienna $katalog rozumiem?

próbowałem dać
  1. f(is_file($galeria.$plik_kat)){


jedynie jest różnica że do zmiennej $katalog nie ma na końcu "/" slesza
a w if-e jest na końcu
ale nie działą
lobopol
Jeżeli w $galeria masz galeria/images to musisz dodać na końcu / przecież nie masz w katalogu galeria pliku o nazwie imagesnazwa_pliku.jpg
jaqu
Zrobiłem teraz tak
  1. <?PHP
  2. $katalog = @dir('galeria/images/') or die ("Nie można listować");
  3. while ($plik = $katalog->read()){
  4. if(is_file($katalog.$plik)){
  5. echo "<a href='galeria/images/$plik' rel='lightbox'><img src='galeria/images/$plik' alt=''></a<BR>";
  6. }
  7. }
  8. $katalog->close();
  9. ?>


niestety wywala bład w linie z if

zmieniłem nazwe $plik_kat na $plik (to nie ma znaczenia ) ale informuje
lobopol
Nie możesz tak mieć w $katalog masz @dir('galeria/images/'), a to nie jest string
benio101
Sorki, pisałem z palca, zapomniałem o galeria/images/.

@up: Dokładnie, $katalog to uchwyt do pliku (czy coś w tym rodzaju), więc nie jest to łańcuch.
Daj np. $katalog_napis='galeria/images/' i w 4. linii (ifce) podmień $katalog na $katalog_napis

Wtedy zgodność typów zaskoczy i is_file zrozumie, o co się pytasz.
Daj więc coś w deseń:
  1. <?PHP
  2. $katalog_napis='galeria/images/'; // ścieżka do katalogu (folderu)
  3. $katalog = @dir($katalog_napis) or die ("Nie można listować"); // podmieniłem 'galeria/images/' na $katalog_napis, żeby nie dublować wpisu, zgodnie z zasadą DRY
  4. while ($plik = $katalog->read()){
  5. if(is_file($katalog_napis.$plik)){ // i tutaj operacja główna, właściwa -> zamiast tego ala-uchwytu do pliku dałem łańcuch ze ścieżką do folderu ($katalog_napis)
  6. echo "<a href='galeria/images/$plik' rel='lightbox'><img src='galeria/images/$plik' alt=''></a><BR>"; // reszta bez zmian
  7. }
  8. }
  9. $katalog->close();
  10. ?>
Aaa.. i znowu pisałem z palca biggrin.gif
Więc sprawdź porządnie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.