Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Odczyt daty z serwera i zrobienie timeline
shpaque
post 5.06.2018, 09:00:25
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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...
Go to the top of the page
+Quote Post
SmokAnalog
post 5.06.2018, 09:17:57
Post #2





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

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


Prosisz bazę o zdjęcia posortowane od najnowszych, a potem w widoku albo iterujesz i sprawdzasz datę, albo w kontrolerze sobie grupujesz po dacie.
Go to the top of the page
+Quote Post
shpaque
post 5.06.2018, 10:51:07
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
nospor
post 5.06.2018, 10:55:22
Post #4





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
shpaque
post 5.06.2018, 11:42:50
Post #5





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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...
Go to the top of the page
+Quote Post
nospor
post 5.06.2018, 11:45:38
Post #6





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
shpaque
post 5.06.2018, 11:48:59
Post #7





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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()
Go to the top of the page
+Quote Post
nospor
post 5.06.2018, 11:50:55
Post #8





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
shpaque
post 5.06.2018, 11:58:49
Post #9





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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..
Go to the top of the page
+Quote Post
batman
post 5.06.2018, 12:09:52
Post #10





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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. ];


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
shpaque
post 5.06.2018, 12:46:15
Post #11





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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);
Go to the top of the page
+Quote Post
batman
post 5.06.2018, 13:39:18
Post #12





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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);


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
shpaque
post 5.06.2018, 13:45:16
Post #13





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


czy to działa dopiero jutro zobaczymy, bo skad inaczej na serwerze tade zmienic smile.gif
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: 19.04.2024 - 09:06