Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][JavaScript][PHP] Fresco lightbox i dynamiczna galeria
Forum PHP.pl > Forum > Przedszkole
shpaque
Witam serdecznie po dłuższym czasie nieobecności. Mam galerię fresco (lightbox), gdzie zasada byłaby taka:

w php w pętli foreach ma mi wyswietlic pierwszy obraz z katalogu, a po kliknieciu w niego ma wyswietlic wszystkie obrazy z tego katalogu, z kolei w skrypcie galerii (fresco) obrazy sa wyswietlane w js... jak to polaczyc zeby najlepiej zrobic to w petli w php?

petla
  1. <section id="photos">
  2. <?php foreach (array_reverse($folder) as $f): ?>
  3. <?php $images = glob($pathToPictures.$f['id']."/*.*"); ?>
  4. <?php if (count($images) != 0): ?>
  5. <?php $gallery = implode(', ', $images); ?>
  6. <a id="gallery" class="link text-center fresco" data-fresco-group="gallery">
  7. <img class="miniatura lazyload" src="<?php echo $images[0]; ?>">
  8. <div class="pasek">–––</div>
  9. <span class="minititle"><?php echo $f['title']; ?><br><small>Full story</small></span>
  10. </a>
  11. <?php endif ?>
  12. <?php endforeach ?>
  13. </section>


js fersco wyglada mniej wiecej tak

  1. $(document).ready(function() {
  2. $('#art').bind('click', function() {
  3. Fresco.show([
  4. { url: '/images/default/index/art/frans_hals.jpg', },
  5. { url: '/images/default/index/art/rembrandt.jpg', caption: "Rembrandt, The Night Watch, 1642" },
  6. { url: '/images/default/index/art/charles_le_brun.jpg', caption: "Charles Le Brun, The Repentant Magdalen, 1655" },
  7. { url: '/images/default/index/art/reynolds.jpg', caption: "Sir Joshua Reynolds, The Countess of Dartmouth, 1757" }
  8. ]);
  9. });
  10. });
  11. </script>


wykombinowałem coś takiego:

  1. <section id="photos">
  2. <?php foreach (array_reverse($folder) as $f): ?>
  3. <?php
  4. $images = glob($pathToPictures.$f['id']."/*.*");
  5. $list = implode(", ", $images);
  6. if (count($images) != 0): ?>
  7. <a id="gallery<?php echo $i; ?>" class="link text-center fresco" href="#" data-fresco-group="gallery<?php echo $i; ?>">
  8. <img class="miniatura lazyload" src="<?php echo $images[0]; ?>">
  9. <div class="pasek">–––</div>
  10. <span class="minititle"><?php echo $f['title']; ?><br><small>Full story</small></span>
  11. </a>
  12. <?php endif ?>
  13. <script>
  14. $(document).ready(function() {
  15. $('#gallery<?php echo $i; ?>').on('click', function() {
  16. Fresco.show([<?php for ($i = 0; $i < count($images) - 2; $i++) {echo "'".$images[$i]."', ";} echo "'".$images[count($images) - 1]."'"; ?>], 2);
  17. });
  18. });
  19. </script>
  20. <?php $i++ ?>
  21. <?php endforeach ?>
  22. </section>


ale w konsoli wychodzi mi:

(index):252 Uncaught TypeError: Fresco.show is not a function
at HTMLAnchorElement.<anonymous> ((index):252)
at HTMLAnchorElement.dispatch (jquery-3.2.1.min.js:3)
at HTMLAnchorElement.q.handle (jquery-3.2.1.min.js:3)
(anonymous) @ (index):252
dispatch @ jquery-3.2.1.min.js:3
q.handle @ jquery-3.2.1.min.js:3
nospor
Moze glupie pytanie, ale dzis juz mnie nic nie zdziwi:
dolaczyles w ogole te biblioteke do strony?
shpaque
mam, tylko wlasnie przeczytalem ze w darmowej zwersji nie idzie z js'a funkcja....

jest opcja zeby to obejsc, zeby wyswietlic pierwsze zdjecie z petli a podlinkowalo ono do galerii z folderu?
nospor
Cytat
a podlinkowalo ono do galerii z folderu?

Nie, js nie ma dostepu do plikow na serwerze. To ty musisz wylistowac i powiedziec dla js jakie pliki tam masz.
shpaque
ok, wykombinowałem to tak:

  1. <section id="photos">
  2. <?php
  3. $i = 0;
  4. foreach (array_reverse($folder) as $f): ?>
  5. <?php
  6. $x = 0;
  7. $images = glob($pathToPictures.$f['id']."/*.*");
  8. if (count($images) != 0): ?>
  9. <?php for ($x = 0; $x < count($images) - 1; $x++): ?>
  10. <?php if ($x == 0): ?>
  11. <a class="link text-center fresco" href="<?php echo $images[$x]; ?>" data-fresco-group="gallery<?php echo $i; ?>">
  12. <img class="miniatura" src="<?php echo $images[$x]; ?>">
  13. <div class="pasek">–––</div>
  14. <span class="minititle"><?php echo $f['title']; ?><br><small>Full story</small></span>
  15. </a>
  16. <?php else: ?>
  17. <a class="fresco" src="<?php echo $images[$x]; ?>" data-fresco-group="gallery<?php echo $i; ?>" style="display: none;">
  18. <img src="<?php echo $images[$x]; ?>">
  19. </a>
  20. <?php endif ?>
  21. <?php endfor ?>
  22. <?php endif ?>
  23. <?php
  24. $i++;
  25. endforeach;
  26. ?>
  27. </section>


teraz tylko problem jest w fakcie, że jak klikne w tą powiedzmy okładkę, wszystko z petlami jest ok, tyle ze nie wyswietla mi kolejnych zdjec, bo one w koncu maja diplay: none. Maja to oczywiscie tylko po to, ze by wyswietlalo sie tylko 1 zdjecie a nie caly folder... Ja to z kolei ominac?
nospor
Pokaz jak wyglada przykladowy czysty kod html oraz js dla tej galerii.
Dokladnie taki sam kod masz wygenerowac przez php. Tu nie ma zadnej magii
shpaque
http://www.frescojs.com/documentation/usage

problem w tym, ze u nich galeria, czyli okladka + niewidoczna reszta zdjec w grupie, jest okreslona tylko w js, i dostepna w wersji pro - dlatego robie to tak, zeby nie korzystajac z js i wersji pro miec ten sam efekt

u mnie teraz wyglada to tak: http://test.smusic.pl/

ok zauwazylem blad - wczesniej mialem ta linie jako <img> a nie <a> i zostalo "src" zamist "href" - teraz działa idealnie.
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.