Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Raz dziennie zmieniający się obrazek o ustalonej godzinie.
Forum PHP.pl > Forum > Przedszkole
nigraS
Jak będzie wyglądał kod php dla skryptu który co dziennie będzie pokazywał inny obrazek po ustalonej godzinie?

Znalazłem taki skrypt, ale on zmienia obrazek tylko o ustalonej godzinie.
  1. <?
  2. $czas= getdate();
  3. $h = $czas['hours'];
  4. if($h >= 6 && $h < 12){
  5. echo '<img src="1.jpg">';
  6. } else if($h >= 12 && $h < 16){
  7. echo '<img src="2.jpg">';
  8. } else if($h >= 16 && $h < 22){
  9. echo '<img src="3.jpg">';
  10. } else {
  11. echo '<img src="4.jpg">';
  12. }
  13. ?>


Jak go zmodyfikować, aby uzyskać taki efekt?
- Dzień 1, godzina 11 - obrazek 1
- Dzieć 2, godzina 11 - obrazek 2
- Dzień 3, godzina 11 - obrazek 3
itd ...
SmokAnalog
Czy Twój serwer obsługuje cron (jeśli nie wiesz co to, to wygooglaj)?
kreatiff
Ja bym policzył ilość dni od jakiejś zadanej daty początkowej i przy każdym wyświetleniu strony sprawdzał resztę z dzielenia przez tyle dni ile ma być obrazków.
I odpowiednio wyświetlał obrazki w zależności od reszty i czy mamy już godzinę 11 czy nie.

Bo jak rozumiem jeden obrazek ma się wyświetlać przez całe 24 godziny?
nigraS
SmokAnalog wiem co to cron, jednak zależy mi na skrypcie.

kreatiff, tak, jeden obrazek ma się wyświetlać 24h.

Czy mógłbyś podać jak taki skrypt ma wyglądać?
by_ikar
  1. <?php
  2.  
  3. $monthly = array(
  4. '1.jpg',
  5. '2.jpg',
  6. '3.jpg',
  7. '4.jpg',
  8. '5.jpg',
  9. '6.jpg',
  10. '7.jpg',
  11. '8.jpg',
  12. '9.jpg',
  13. '10.jpg',
  14. '11.jpg',
  15. '12.jpg',
  16. '13.jpg',
  17. '14.jpg',
  18. '15.jpg',
  19. '16.jpg',
  20. '17.jpg',
  21. '18.jpg',
  22. '19.jpg',
  23. '20.jpg',
  24. '21.jpg',
  25. '22.jpg',
  26. '23.jpg',
  27. '24.jpg',
  28. '25.jpg',
  29. '26.jpg',
  30. '27.jpg',
  31. '28.jpg',
  32. '29.jpg',
  33. '30.jpg',
  34. );
  35.  
  36. if(date('G') >= 11)
  37. {
  38. $image = $monthly[(date('j')-1)];
  39. } else
  40. {
  41. $image = date('j') == 1 ? $monthly[day('t')] : $monthly[(date('j')-2)];
  42. }
  43.  
  44. echo '<img src="'.$image.'">';


Jeżeli chcesz tylko 7 obrazków dla każdego dnia tygodnia, zamiast miesiąca:

  1. <?php
  2.  
  3. $weekly = array(
  4. '1.jpg',
  5. '2.jpg',
  6. '3.jpg',
  7. '4.jpg',
  8. '5.jpg',
  9. '6.jpg',
  10. '7.jpg',
  11. );
  12.  
  13. if(date('G') >= 11)
  14. {
  15. $image = $weekly[date('N')-1];
  16. } else
  17. {
  18. $image = date('N') == 1 ? $weekly[6] : $weekly[date('N')-2];
  19. }
  20.  
  21. echo '<img src="'.$image.'">';
SmokAnalog
by_ikar, niezbyt elegancko. A poza tym zobacz dokładnie co zwraca date('w').

Ja proponuję coś takiego:
  1. <?php
  2.  
  3. $start = new DateTime('2014-08-02');
  4. $today = new DateTime;
  5.  
  6. $days = $today->diff($start)->format('%a');
  7.  
  8. if ($today->format('G') >= 11 || $days === '0') {
  9. $days++;
  10. }
  11.  
  12. $src = $days . '.jpg';
  13.  
  14. ?>
  15.  
  16. <img src="<?php echo htmlspecialchars($src) ?>">


Musisz wpisać w $start datę, od której ma się zacząć liczenie. Wpisałem dzisiejszą. Cały pierwszy dzień wyświetlał się będzie obrazek 1.jpg, tak samo kolejnego dnia do 11:00. Od 11:00 wejdzie 2.jpg i będzie się wyświetlał aż do kolejnego dnia do 11:00. I tak dalej.
by_ikar
@Smok - fakt, z tym "w" to wyskoczyłem.. No ale tak mi się wydawało że w date "w" jako dzień tygodnia, ale nie pomyślałem że jest liczony od niedzieli. Druga sprawa to zapomniałem o tym co będzie jeżeli będzie to pierwszy dzień tygodnia, albo pierwszy dzień miesiąca. Takie są efekty pisania na kolanie.. No ale już poprawiłem i zaktualizowałem skrypty. Użyłem tablic, bo te obrazki mogą mieć różne nazwy, ale w przypadku kiedy te nazwy będą cyframi dnia miesiąca/tygodnia, to ograniczyć to można do kilku linijek.

Dni miesiąca:
  1. <?php
  2.  
  3. if(date('G') >= 11)
  4. {
  5. $image = date('j');
  6. } else
  7. {
  8. $image = date('j') == 1 ? day('t') : (date('j')-1);
  9. }
  10.  
  11. echo '<img src="'.$image.'.jpg">';


czy dla dni tygodnia:

  1. <?php
  2.  
  3. if(date('G') >= 11)
  4. {
  5. $image = date('N');
  6. } else
  7. {
  8. $image = date('N') == 1 ? 7 : (date('N')-1);
  9. }
  10.  
  11. echo '<img src="'.$image.'.jpg">';

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.