Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][Symfony3] Strategia na tworzenie i zapis miniaturek do zdjęć
CodeRider
post 19.06.2017, 19:07:22
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 14.06.2017

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


Cześć!

Mam encję Article, która ma id, title i image. Tworzę formularz, dodaję walidację i wszystko ok.

Ale co w sytuacji, gdy potrzebuję dodatkowo 3 miniaturki z uploadowanego zdjęcia, które muszę przyciąć, uploadować i zapisać do nich ścieżkę w bazie danych?

Czy wtedy powinienem dopisać nową encję zdjęcia, która będzie miała swoją tabelę w bazie danych, dodatkową klasę do przycinania obrazka i będzie wstrzyknięta do Article (encja zdjęcia oczywiście)?
Czy może jest jakieś proste rozwiązanie, aby wszystko to trzymać w encji Artykułu?

Ten post edytował CodeRider 19.06.2017, 19:11:04
Go to the top of the page
+Quote Post
damianooo
post 19.06.2017, 20:04:59
Post #2





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

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


Nie jestem pewien bo nie robiłem czegoś podobnego wcześniej ale wydaje mi się że skoro o zdjęciu będzie więcej informacji to raczej osobna encja będzie potrzebna ... z czasem na pewno będziesz potrzebował takie pola jak createdAt i updatedAt , więc już się robi tego więcej ... poza tym rozumiem że Artykuł może mieć więcej zdjęć więc chyba logicznym wydaje się zrobienie dodatkowej encji ..
Wolałbym jednak aby wypowiedział się ktoś kto podobne rzeczy robił
Go to the top of the page
+Quote Post
Pilsener
post 20.06.2017, 07:43:00
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Podejścia są trzy:
- tylko oryginalny plik jako encja w DB
- jak wyżej, ale do encji dodane dodatkowe informacje
- każdy plik jako encja w DB

Najsensowniej wydaje się 2. Po uploadzie masz standardowe encje file, gdzie dodajesz pola typu pathSmall, pathXSmall etc. Akcję tworzącą miniaturki odpalasz w CRONie, akcja wyszukuje encje bez miniaturek, tworzy je i zapisuje w bazie.

Przykładowa encja file z jednego z projektów symfony:

Cytat
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mime` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`extension` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,


Gdzie path to unikalna, wygenerowana nazwa pliku pod którą jest on zapisywany na dysku. Wystarczy dodać path_small i przed pobraniem miniaturki sprawdzać, czy pole nie jest null (jak jest null można wstawić zaślępkę typu "trwa przetwarzanie zdjęcia" czy coś w tym stylu)
Go to the top of the page
+Quote Post
Pyton_000
post 20.06.2017, 07:48:11
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Ja bym zapisywał każdą fotkę (+ te dodatkowe) jako osobna encja powiązana z Articles. Dodatkowo możesz do zdjęć dodaktowych dodać powiązanie z rodzicem w Encji Photo.
Jakby nie patrzeć to zmienione zdjęcia to już są nowe zdjęcia smile.gif

Oczywiście fotki zapisywane na dysku a nie w BD. To tak ku jasności smile.gif

Ten post edytował Pyton_000 20.06.2017, 07:48:43
Go to the top of the page
+Quote Post
nospor
post 20.06.2017, 09:00:06
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ja skolei nie kumam, po co w ogole chcecie zapisywac info o miniaturkach w bazie. Masz w bazie glowna fotke i wystarczy. Miniaturki sa po to, by w roznych formatach wyswietlac dana fotke. Na liscie jeden format, w arcie inny, gdzies na stronie glownej jeszcze inny. Po co do tego info w bazie? Do niczego. Miniaturke generujesz w razie potrzeb i w kazdej chwili mozesz sobie dynamicznie zmieniac. A jesli masz naprawde duzy ruch to mozesz generowac od razu dany zestaw miniatur dla danej fotki 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
Puszy
post 20.06.2017, 09:13:45
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

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


Z łopatologicznych rozwiązań jest też opcja robienia miniaturek w locie np. przy użyciu Imagine, choć wydajnościowo może się to nie opłacać. Możesz też podczas uploadu tworzyć miniaturki, zapisywać je do folderów "small", "large" etc. Pliki zawsze będą miały tę samą nazwę, więc w encji przechowujesz tylko jedną nazwę a jedynie przy wyświetlaniu korzystasz z niezależnych ścieżek, w przypadku braku zdjęcia (np. dodanie nowego rozmiaru) zawsze możesz użyć HTMLowego atrybutu onerror, sprawdzić czy plik istnieje i wyświetlić inny, lub napisać joba który będzie pobierał z configu wymiary nowego rozmiaru i tworzył nowe miniatury na podstawie oryginalnego pliku, dzięki temu po kilku minutach po dodaniu nowego rozmiaru masz nowe miniaturki.
Go to the top of the page
+Quote Post
CodeRider
post 20.06.2017, 09:45:32
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 14.06.2017

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


Cytat(nospor @ 20.06.2017, 10:00:06 ) *
mozesz generowac od razu dany zestaw miniatur dla danej fotki i juz.


No tak, od razu mam dane dla całego zestawu i tworzę miniatury. Ale w zależności od strony, mają one inne nazwy.

Rozumiem, że jeśli nie zapisuję ścieżki do każdej miniaturki to robię to tak, że w klasie encji Image mam np. 4 ścieżki na stałe + 4 metody, które zwracają mi path do image?

Np.

  1. private $originalPath = __DIR__.'/images';
  2. private $thumbXSmallPath = __DIR__.'/images/XSmall';
  3.  
  4. public function getOriginalImagePath(){
  5. return $originalPath . $name . $ext;
  6. }
  7. public function getThumbXSmall(){
  8. return $thumbXSmallPath. $name . $ext;
  9. }


i posługuję się tylko nazwą i rozszerzeniem zdjęcia? (w bazie danych)

Ten post edytował CodeRider 20.06.2017, 09:49:04
Go to the top of the page
+Quote Post
nospor
post 20.06.2017, 09:56:17
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tak


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

"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
Pilsener
post 20.06.2017, 13:30:45
Post #9





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Cytat
po co w ogole chcecie zapisywac info o miniaturkach w bazie

1. Żeby wiedzieć, czy miniaturki już się wygenerowały (są już dostępne) - zazwyczaj dodaje się wiele zdjęć, nieraz bardzo dużych i ich obróbka "w locie" jest niemożliwa, z kolei przy wyświetlaniu nie trzeba używać "file_exists"
2. Czasami, żeby zapisywać dodatkowe informacje związane z miniaturkami (jeśli są potrzebne, np. znaki wodne, tagi, nagłówki, tekst w "alt", tryb wygenerowania...)
3. Żeby było prościej a co za tym idzie:
- żeby uniezależnić przechowywanie pliku na dysku od jego typu, funkcji, przeznaczenia etc. Preferuję system, w którym plik nazywa się np. 1a2B i jest zawsze w jednym folderze, cała reszta w bazie lub cfg - tak jest prościej
- żeby łatwiej napisać funkcje/routingi pobierające plik, np. file/1a2B zadziała niezależnie od typu pliku a inaczej musimy kombinować file/xsmall/1a2B, file/orygin/1a2B itd.
- dużo łatwiej zmienić coś w bazie/cfg niż majstrować przy folderach czy ścieżkach. Widać to zwłaszcza, gdy trzeba robić migrację jakiś funkcjonalności czy całych systemów.
- żeby łatwiej debugować
- itd.

Taką mam opinię po pracy z wieloma różnymi systemami.
Go to the top of the page
+Quote Post
Pyton_000
post 20.06.2017, 13:37:21
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


No i dodatkowo mieć informację jaki pliki mamy a nie potem się zastanawiać jakie pliki wywalić jak będzie ich 5000000000000 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: 24.06.2025 - 00:13