Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Raz dziennie zmieniający się obrazek o ustalonej godzinie.
nigraS
post 1.08.2014, 22:43:24
Post #1





Grupa: Zarejestrowani
Postów: 179
Pomógł: 1
Dołączył: 25.11.2006

Ostrzeżenie: (0%)
-----


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 ...
Go to the top of the page
+Quote Post
SmokAnalog
post 1.08.2014, 22:58:26
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Czy Twój serwer obsługuje cron (jeśli nie wiesz co to, to wygooglaj)?
Go to the top of the page
+Quote Post
kreatiff
post 1.08.2014, 23:16:42
Post #3





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


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?

Ten post edytował kreatiff 1.08.2014, 23:17:53
Go to the top of the page
+Quote Post
nigraS
post 1.08.2014, 23:49:33
Post #4





Grupa: Zarejestrowani
Postów: 179
Pomógł: 1
Dołączył: 25.11.2006

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
by_ikar
post 2.08.2014, 10:03:03
Post #5





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


  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.'">';


Ten post edytował by_ikar 2.08.2014, 12:14:52
Go to the top of the page
+Quote Post
SmokAnalog
post 2.08.2014, 10:47:36
Post #6





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.

Ten post edytował SmokAnalog 2.08.2014, 10:48:19
Go to the top of the page
+Quote Post
by_ikar
post 2.08.2014, 12:22:43
Post #7





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


@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">';

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.08.2025 - 22:45