OpisujÄ™ tutaj moje perypetie z mediashare...
Jak już pisałem jakiś czas temu na forum poszukiwałem Galerii, która wspierała by portal o charakterze społecznościowym, czyli zdjęcia użytkowników zamiast awatarów, albumy, bajery, wszystko ładne, łatwe i szybkie...
Po niesamowicie pozytywnych odczuciach z Pagesetterem postanowiłem dać szansę Mediashare ale to co ona oferuje na starcie trochę nie pasuje moim założeniom:
1. Każdy użytkownik ma swój 1 własny album - w nim może mieć swoje pod albumy.
2. Można będzie wybrać "zdjęcie identyfikujące użytkownika" - jak awatar (ale jak to zrobić)
3. Inne bajery typu slideshow jakieś ciekawe dodatki jak możliwość obsługi innych typów mediów
!!! Najważniejsze to żebym miał dobre odczucie co do powiązania modułu z systemem to znaczy, żeby w przyszłości mnie nie ograniczał jakoś oraz co do wykonania modułu.
No więc, miałem tą Mediashare już zainstalowaną i obsługiwała ona zdjęcia u mnie, więc ją pierwszą na warsztat... Najpierw na elfisk.dk co tam słychać o niej i ta droga poprowadziła mnie jak po sznurku do www.sexyandfamous.com
No i po przejrzeniu tej strony już wiedziałem, że to będzie mediashare i co najważniejsze wiedziałem jak to będzie zrobione :D no nie do końca, ale jak się ma na coś pozór to się ma :D
Jedziemy... pierwsza sprawa każdy user ma mieć tylko jeden album główny no więc:
Pownikałem w stronę www.sexyandfamous.com i co się okazało, oni to zrobili tak, że nie ma albumu o aid (album id) =1, czyli głównego po prostu nie ma?...
Nie ma żadnego zbiorczego albumu z którego można by przeglądać inne albumy... Inna sprawa to taka, że w profilu, klikając na zdjęcie, można przejść do albumu użytkownika! a jak się jest zalogowanym będąc na stronie swojego profilu to klikając na ikonkę/zdjęcie przechodzi się do swojego własnego albumu !! i tu uwaga nawet jeśli się go nie ma założonego!!! System sam zakłada album główny z nazwą taką samą jaką ma użytkownik i przenosi nas do jego w tryb edycji...
Ideał hmm... to co powiecie na to, że główne zdjęcie w głównym albumie użytkownika (to z zieloną kropką) jest zdjęciem identyfikującym nas na całej stronie, czyli forum i wszędzie !!!
No wiec ja też chce ;]
Ok więc najpierw szkielet;
Żeby każdy user miał tylko jeden album główny... No to jest całkiem skomplikowane do opisywania jak cała mediashare...
Najpierw wywaliłem z templatek wszystkie możliwości założenia albumu w albumie aid 1, czyli w głównym.
Teraz za edycję albumu odpowiada funkcja edit, więc każdy user jak chce edytować jakiś album musi ją wywołać i tutaj na starcie musi być podany aid, a jak nie jest to jest wstawiany nr 1
Ja bym chciał żeby przy braku podania albumu sprawdzało, czy użytkownik ma już album jeśli tak to przekierowanie do niego, a jeśli nie to założenie i następnie przekierowanie do niego... to akurat było łatwe każdy album ma określony tzw nestedLevel, czyli poziom zagnieżdżenia...
| |---3
1 |-2----|
| |---3
1-- album główny
2-- albumy które widzimy w głównym
3--podalbumy
Czyli ifami w php sprawdzamy, czy jest podany aid jak nie jest to sprawdzamy, czy user ma album z nested lewel == 2( trzeba napisać funkcję api:)), a jak nie ma to wywołujemy funkcję api(już napisaną)( w parametrach możemy podać tytuł albumu np: nazwę użytkownika), która zakłada taki album i zwraca jego aid :)
załatwione :)
Ok teraz inna sprawa to główne zdjęcie i tu jest ból
Napisałem funkcję, która podaje częściową ścieżkę pliku miniaturki głównego zdjęcia jakie ma user w swoim albumie...
W mediashare sÄ… 3 tabele
1 tabela albumy w niej sÄ… takie kolumny jak uid, aid, nestedLevel, mainItemId ...
2 tabela media w niej kolumny miedzy innymi takie jak mainItemId, thumbnajlId, PrevId, OrginalId ...
3 tabela store jest to tabela z ścieżkami do plików są w niej takie kolumny jak mssID(odpowiednio: thumbnajlId, PrevId, OrginalId ), filetype, fileref...
Podałem tylko te interesujące nas kolumny. Każdy zdjęcie w mediashare zapisane jest w 3 postaciach miniaturki podglądu oraz oryginał
Na starcie mam uid, czyli id usera chcÄ™ mainItemId, ale tylko tych co majÄ… nestedLevel == 2 ....sql
Ok... mam teraz do drugiej tabeli mam mainItemId chcÄ™ odpowiedni thumbnajlId... sql
Ok... mam no to teraz trzecia tabela, ponieważ thumbnajlId to mssID więc wyciągam fileRef...sql
mam !!! ;( ale dłuuugie zapytanie sql nieporęczne wywoływanie w templatkach (pnmodapifunc) no porażka....
Sprawdzałem z jednym dużym sql później rozbiłem na mniejsze zapytania.... porażka taka fuszera mi się strasznie nie podobała...:(:(:(
I tak se myślę... kurde fajnie by było wywoływać zdjęcie dokładnie tak jak awatar, czyli za pomocą zmiennej użytkownika _YOURAVATAR
I tutaj jak ktoś pamięta bajkę Pomysłowy Dobromir to już wiecie jak wyglądałem jak wpadłem na ten niecny plan :D
Podczas ustalania głównego zdjęcia w albumie (ta zielona kropka) wywoływana jest funkcja i ona nie robi nic innego jak odbiera id zdjęcia i id albumu i wstawia odpowiednie dane do bazy(mainItemId).
Skoro mam id zdjęcia, id albumu i dane usera, to wystarczy tylko sprawdzić, czy czasem nie jest to album o nestedLevel == 2
Jeśli jest to pobrać zakodowaną ścieżkę miniaturki (fileRef) i jedną funkcją setuservar wstawić do _YOURAVATAR banał w trampkach!!!
Zapytanie jest długie, ale jest wykonywane sporadycznie kiedy user zmienia zdjęcie główne.
Teraz mam w zmiennej _YOURAVATAR częściową ścieżkę do pliku np: le/14ytosqp2u35m0i022ayj2jeipfpe2-tmb.png
wystarczy pozmieniać wszędzie z /images/avatar na /mediashare i mamy zdjęcie :D zamiast awataru
Jeśli jeszcze przeniesiemy nasze avatary z images/avatar do /mediashare to użytkownicy nie odczują przejścia tak bardzo :D
Achh.pl sielanka teraz wszystko gra, buczy, ładuje się szybko i nie ryje bazy specjalnie bardziej... oczywiście jest wiele spraw, które można dopracować... np: teraz w albumie głównym mam pełno albumów użytkowników, w których nic nie ma...
odkąd założenie albumu głównego odbywa się za pomocą jednego kliknięcia...
oczywiście to nie jest jakiś specjalny problem bo i z założenia galeria ma być przeglądana poprzez profil ewentualnie bloki ze zdjęciami i inne takie... główna strona galerii to mogą być wybrane albumy przez admina i dodawane wg admina uznania jako warte obejrzenia :D
Jest idealnie :D jestem happy i powoli myślę nad nowymi ficzerami właśnie związanymi z ocenianiem zdjęć rankingiem i innymi klimatami
Przy okazji chce powiedzieć jeszcze, że jestem oburzony na nowe wersje phpFreeChat nie chcą sie implementować...
Pozdrawiam
Jeśli chodzi o dodatki to tak naprawdę potrzebny jest dobry blok do Ratings albo nawet 2...
np:
Top Rated, najwyżej oceniane z możliwością wyboru modułu, pozycji na liście itp...
Most Rated, najczęściej oceniane te same opcje...
Pytań jest klika 1 sprawa to, czy top rated ma wskazywać tylko na pozycję z najwyższą oceną w danym module, czy na pozycję o najwyższym stosunku ocena/ilość ocen?