Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Odczyt daty z serwera i zrobienie timeline
Forum PHP.pl > Forum > Przedszkole
shpaque
Witam serdecznie,
mam takowe pytanie, jak w czystej teorii na razie i jakimi komendami wykonać timeline galerii zdjęć wrzucanych na serwer?

Np wrzucam dzisiaj 3 zdjęcia, pojutrze 8 - a skrypt wyświtli mi timeline z 3 zdjęciami dzisiaj posortowanymi w zależności od czasu uploadu i te pojutrze...

Czyli trzeba mi wyciągnąć w jakiś sposób czas (data i godzina minuta) uploadu na serwer i wyswietlenie pozniej paczki zdjec z jednego dnia, nastepnego mozliwego itd...
SmokAnalog
Prosisz bazę o zdjęcia posortowane od najnowszych, a potem w widoku albo iterujesz i sprawdzasz datę, albo w kontrolerze sobie grupujesz po dacie.
shpaque
ok to teraz praktyka:

  1. $picFolder = './assets/img/zdjecia-z-budowy/';
  2. $dir = opendir($picFolder);
  3.  
  4. while($fileName = readdir($dir))
  5. {
  6. if(($fileName != ".") && ($fileName != ".."))
  7. {
  8. $img = $picFolder.$fileName;
  9. $uploadDate = date('d.m.Y', filemtime($img));
  10. $pictures[] = array('uploadDate' => $uploadDate, 'fileName' => $fileName);
  11. }
  12. }
  13. print_r($pictures);
  14. closedir($dir);


print_r daje mi:
  1. Array ( [0] => Array ( [uploadDate] => 05.06.2018 [fileName] => 02.jpg ) [1] => Array ( [uploadDate] => 05.06.2018 [fileName] => 01.jpg ) )
nie za duzo tablic w tablicach? czy jest ok?

@EDIT

raczej tak bym zrobił:

  1. $pictures[] = [$uploadDate => $fileName];

co daje
  1. Array ( [0] => Array ( [05.06.2018] => 02.jpg ) [1] => Array ( [05.06.2018] => 01.jpg ) )


@EDIT 2

...w każdym razie teraz mamy prostą pętlę
  1. foreach ($pictures as $f)
  2. {
  3. echo $f['fileName'];
  4. }


w której wyswietlane sa pliki - jak zrobic zeby wyswietlaly sie pliki jednej konkretnej daty? pozniej nastepna poetla z inna data i tak dalej?
nospor
Cytat
$pictures[] = [$uploadDate => $fileName];

To twoje drugie rozwiazanie nie ma zadnego sensu. Ani nie zlikwidowales tablicy wielowymiarowej ani nie polepszyles jakosci danych.
Wroc do rozwiazania pierwszego bo tylko wowczas bedziesz wstanie cokolwiek zrobic z danymi

Co do wyswietlania zdjec z danej daty to pogrupuj sobie teraz te zdjecia wg dat i juz
shpaque
wiem, ze to teraz powinno byc proste ale juz sie gdzies zapetlilem.
to mi rozbija na pojedyncze tablice:

  1. foreach ($pictures as $i => $picture)
  2. {


i mam wynik
  1. Array ( [uploadDate] => 05.06.2018 [fileName] => 02.jpg )
  2. Array ( [uploadDate] => 05.06.2018 [fileName] => 01.jpg )


znalazlem gdzie Twoje rozwiazanie:

  1. //a teraz wygenerujemy stronę na podstawie uzyskanych danych
  2. echo '<ul>';
  3. foreach ($categories as $idCat => $category){ //petla, która leci po kategoriach
  4. echo '<li>'.$category['name'].' (liczba produktow: '.count($category['products']).')<ul>';
  5. foreach ($category['products'] as $product){ //pętla, która leci po produktach w kategorii
  6. echo '<li>Produkt o nazwie <b>'.$product['name'].'</b> i id <b>'.$product['id'].'</b></li>';
  7. }
  8. echo '</ul></li>';
  9. }
  10. echo '</ul>';


ale za Chiny nie moge go przelozyc, bo u mnie tablice wygladaja inczaej chyba...
nospor
Art, z ktorego wziales moj kod, nadaje sie tutaj idealnie wlasnie. Masz tam pokazane rozne grupowania na podstawie roznych danych. Twoje lapie sie jak najbardziej.

z kodu co ttuaj wkleiles twoimi kategoriami sa daty a produktami nazwy plikow. Nie ma zadnej roznicy
shpaque
tak tylko nawet jak analogicznie dam:

  1. foreach ($pictures as $i => $picture)
  2. {
  3. foreach ($picture['uploadDate'] as $pic)
  4. {
  5. echo $pic['fileName'];
  6. }
  7. }


to
  1. Invalid argument supplied for foreach()
nospor
No ale tablica $pictures nie jest tablica analogiczna do $categories.... Wpierw na podstawie tablicy $pictures masz stworzyc analogiczna do $categories. przeciez ty wziales tylko koncowy kod a caly poczatek olales... no jak niby to ma dzialac? Wpierw by wyswietlac dane z pogrupowanej tablicy, to trzeba te tablice stworzyc
shpaque
czyli lopatologicznie zaczynamt tak?

  1. foreach ($pictures as $i => $picture)
  2. {
  3. $dates[] = $picture['uploadDate'];
  4. $names[] = $picture['fileName'];
  5. }


pozniej oddzielnie petla... no wlasnie..
batman
A nie prościej byłoby stworzyć taką tablicę?
  1. $pictures = [
  2. '2018.03.22' => ['01.jpg', '02.jpg'],
  3. '2018.03.26' => ['03.jpg', '04.jpg', '05.jpg']
  4. ];
shpaque
na samym poczatku o tym myslalem, ale jak?

  1. while($fileName = readdir($dir))
  2. {
  3. if(($fileName != ".") && ($fileName != ".."))
  4. {
  5. $img = $picFolder.$fileName;
  6. $uploadDate = date('d.m.Y', filemtime($img));
  7. $pictures = [$uploadDate => [$fileName]];
  8. }
  9. }
  10. closedir($dir);


jak zrobic zeby nie powtarzal daty tylko dodawal do jej tablicy?



@EDIT

dobra, o cos takiego chodzi?

  1. while($fileName = readdir($dir))
  2. {
  3. if(($fileName != ".") && ($fileName != ".."))
  4. {
  5. $img = $picFolder.$fileName;
  6. $uploadDate = date('d.m.Y', filemtime($img));
  7.  
  8. $files[] = $fileName;
  9. $array = [$uploadDate => $files];
  10. }
  11. }
  12. closedir($dir);
batman
Takie coś powinno zadziałać. Nie testowałem, więc mogła gdzieś wkraść się literówka.

  1. <?php
  2. $array = [];
  3. while ($fileName = readdir($dir)) {
  4. if ($fileName != "." && $fileName != "..") {
  5. $img = $picFolder.$fileName;
  6. $uploadDate = date('d.m.Y', filemtime($img));
  7.  
  8. if (!isset($array[$uploadDate])) {
  9. $array[$uploadDate] = [];
  10. }
  11.  
  12. $array[$uploadDate][] = $fileName;
  13. }
  14. }
  15. closedir($dir);
shpaque
czy to działa dopiero jutro zobaczymy, bo skad inaczej na serwerze tade zmienic smile.gif
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-2024 Invision Power Services, Inc.