![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 6.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, próbuje zrobić wyświetlanie komentarzy z opcją rodzic/dziecko czyli komentarz i odpowiedzi do nich. Google podpowiada że trzeba użyć tablic rekursywnych aby wygenerować drzewo komentarzy. Niestety z takimi tablicami nie miałem okazji się bawić do tej pory.
Mam taką tablicę:
Chciałbym dołączać dane do tej tablicy w pętli while po pobraniu danych z bazy. I teraz pojawia się pytanie: Jak dodać np. do 24 kolejne dziecko ? Albo jak dodać do 19 dziecko ? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 4 Dołączył: 12.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
proponuje Ci zrobić to na obiektach:
aby wyswietlic wszystkie komentarze z PARENT = 0 - robisz petle po komentarz::$mainArray |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 6.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedź. W trakcie czekania na ta odpowiedź wpadłem na o wiele "lżejszy" pomysł (IMG:style_emoticons/default/smile.gif)
Wyświetlanie komentarzy w formie drzewa = odpowiednio duże marginesy z lewej strony to tylko estetyka, aby użytkownik wiedział do którego komentarza to odpowiedzi. Jako, że robienie struktury na drzewie a potem wyświetlanie to dość spore obciążenie dla serwera (aby zachować strukturę musimy wczytać wszystkie komentarze), postanowiłem wymyślić coś lepszego. W strukturze tabeli z komentarzami mamy takie kolumny: ID (zwiększane AI), KEY, DEPH I to nam wystarczy ! Teraz gdy dodajemy zwykły komentarz ustawiamy tą samą wartość w KEY co w kolumnie ID, a gdy komentarz jest odpowiedzią do innego to pobieramy jego ID i ustawiamy w KEY i zwiększamy DEPH o jeden (IMG:style_emoticons/default/smile.gif) Wyświetlając sortujemy wyniki po KEY oraz ewentualnie dacie dodania wpisu i dodajemy odpowiednie marginesy w zależności od wartości DEPH. Możemy wprowadzić paginację bo jak widzicie nie musimy tworzyć żadnej struktury (IMG:style_emoticons/default/smile.gif) Na razie szukam sposobu jak ustawić tą samą wartość w polu KEY co w polu ID w trakcie dodawania wpisu. Takie coś niestety nie działa: INSERT INTO `komentarz` (`key`, `deph`) VALUES (AUTO_ICREMENT, 5) Można by przed zapisem wysłać zapytanie do bazy jaka jest aktualnie największa wartość kolumny ID, zwiększyć ją o jeden i dopiero wywołać inserta ale ja wolałbym zrobić to na jednym zapytaniu, o ile jest taka możliwość (IMG:style_emoticons/default/smile.gif) Czy wiecie jak to zrobić ? Ten post edytował Sztef89 11.12.2011, 14:11:35 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 4 Dołączył: 12.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
Albo przejmij po dodaniu wpisu `insert id` i zrob update
pamietaj by ograniczyc depth w html - bo przy levelu 100 będziesz miał np.: -20px * 100 = -2000px (IMG:style_emoticons/default/biggrin.gif) odobiście jestem przeciwny takim drzewkom komentarzy - ale kto co lubi (IMG:style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 6.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nom ale to nadal 2 zapytania. Czyli się nie da odczytać wartość AI tej kolumny podczas robienia INSERTa ?
Oczywiście założyłem w algorytmie wyświetlającym ze jak przekroczy ileś tam to nie robi już większego marginesu (IMG:style_emoticons/default/smile.gif) Jestem nowy w tym temacie, na razie w moim pomyślę nie widzę żadnych wad. Mógłbyś napisać coś więcej dlaczego jesteś przeciwny takim drzewom ? Udało mi się zrobić to na jednym zapytaniu:
-- Robię system komentarzy do pracy inżynierskiej. Za jakieś dwa dni skończę i będziecie mogli zobaczyć jak działa (IMG:style_emoticons/default/smile.gif) Jak będą chętni to zamieszczę linka aby zobaczyć jak powyższe rozwiązania działają w praktyce (IMG:style_emoticons/default/smile.gif) Ten post edytował Sztef89 11.12.2011, 17:25:47 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 4 Dołączył: 12.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
Mógłbyś napisać coś więcej dlaczego jesteś przeciwny takim drzewom ? Wówczasz dla mnie całość jest nieczytelna - nie lubię jak mi coś lata prawo lewo. Łatwo zgubić wątek - rozwiązanie ze zwykłą listą jest przejrzyste (wizualnie). Nie widzę sensu wątkowania - to nie forum (IMG:style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 6.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wówczasz dla mnie całość jest nieczytelna - nie lubię jak mi coś lata prawo lewo. Łatwo zgubić wątek - rozwiązanie ze zwykłą listą jest przejrzyste (wizualnie). Nie widzę sensu wątkowania - to nie forum (IMG:style_emoticons/default/biggrin.gif) Ahaaa, Ty jesteś przeciwko robienia marginesów dla odpowiedzi, a nie przeciw rozwiązaniu jak dopasowuje odpowiedzi do "rodziców", dobrze zrozumiałem ? (IMG:style_emoticons/default/smile.gif) Moim zdaniem dodanie niewielkiego marginesu bardzo pomaga w orientacji gdy się czyta kilka dyskusji w komentarzach (IMG:style_emoticons/default/smile.gif) Weźmy np.: bardzo dobry system komentarzy DISQUS, nie dość, że ma wcięcia to jeszcze możemy chować dyskusje, które nas nie interesują, moim zdaniem rozwiązania w DISQUS są genialne i bardzo dobrze się czyta komentarze. Mógłbym jedynie ponarzekać na ogromne marginesy do kolejnych odpowiedzi (aż 50px !). Jakby nie to, że ten system stoi na ich serwerze i nie da się postawić go na swoim serwerze, to że integracja z własną bazą użytkowników jest możliwa dopiero w wersji płatnej (w bardzo promocyjnej cenie 299$/miesiąc), to bym na pewno się zdecydował na ten system. Ale widzę, że dobrze zrobiłem robiąc ten system samemu. Mam pewność, bynajmniej, że to będzie bardzo wydajnie chodziło. Ten post edytował Sztef89 11.12.2011, 23:38:39 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 09:28 |