Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Komentarze w formie drzewka
Forum PHP.pl > Forum > PHP
wujek2009
Cześć.

Widziałem taki mechanizm na blogach opartych na Wordpress (np. www, screen).

Nie mam pojęcia jak zabrać się za to, chciałem spróbować bazować na mechanizmie WP, ale standardowo tego nie ma w skrypcie - a na supporcie WP nie potrafią mi napisać nazwy tej wtyczki.
pedro84
Zwykłe zagnieżdżone komentarze. Jak to nie ma w skrypcie? biggrin.gif Odpowiem, jest. Zobacz funkcję wp_list_comments()

Edit:
Ktoś tu chyba swoje posty usuwa:
Cytat
shreker odpowiedział na temat o nazwie "[PHP]zakodowanie i zabezpieczenie stopki" , który subskrybujesz.

Temat możesz znaleźć tu:

http://forum.php.pl/index.php?showtopic=15...view=getnewpost

Może być więcej odpowiedzi w tym wątku, ale tylko 1 e-mail dziennie jest wysyłany dla każdego subskrybowanego tematu.
Wynika to z limitu ilości e-mail'i wysyłanych do Twojej skrzynki odbiorczej.
wujek2009
Znalazłem funkcje wp_list_comments() w comment-template.php, ale nie mogę znaleźć wywołania tej funkcji, w jakim pliku to jest?
Poza tym zainstalowałem Polski WordPress 2.8.4 PL i używam standardowego stylu - ani nie mogę odpowiadać na czyjeś wypowiedzi przez co nie tworzy się zagnieżdżanie.

Cytat
Ktoś tu chyba swoje posty usuwa:


Pomyłka chyba :?
pedro84
W Codexie znajdziesz info na ten temat. A ustawiłeś zagnieżdżony komentarze?

Możliwe, że pomyłka, nie wiem.
muk4
Jak masz komentarze oparte o MySQL to ja bym to zrobił tak:
w tabeli z komentarzami dał dodatkowo 1 pole
Np.
|id||news_id|reply|author|content|date|

Wszystkie pola chyba zrozumiałe oprócz reply:
Jeżeli wysłany komentarz to po prostu zwykły komentarz do wpisu na stronie (newsa, notki) to reply = 0
Jeżeli jest to odpowiedź na inny komentarz to wtedy w reply znajduje się id tego komentarza.
pedro84
Cytat(muk4 @ 9.07.2010, 20:02:19 ) *
Jak masz komentarze oparte o MySQL to ja bym to zrobił tak:
w tabeli z komentarzami dał dodatkowo 1 pole
Np.
|id||news_id|reply|author|content|date|

Wszystkie pola chyba zrozumiałe oprócz reply:
Jeżeli wysłany komentarz to po prostu zwykły komentarz do wpisu na stronie (newsa, notki) to reply = 0
Jeżeli jest to odpowiedź na inny komentarz to wtedy w reply znajduje się id tego komentarza.

Wiesz co to Wordpress? Bo wątpu to Ty nie przeczytałeś.
muk4
@PEDRO84
Nie za bardzo rozumiem o co ci chodzi.

Cytat
chciałem spróbować bazować na mechanizmie WP

Chciałem to czas przeszły, więc uważam że interesują go wszystkie sposoby.
Hoku
a może rozbicie na 2 tabele w bazie komentarzy w drzewo 'rodzic_id' i 'id_posta'
a w drugiej dane 'id_dokumentu' 'id_posta' i zawartość komentarza.
dla pobranego posta z danych wziąć id_posta wyszukać w tabeli drzewo w polu rodzic_id i dla kazdego otrzymanego wyniku pobrać dane z tabeli dane z id otrzymanego jako dziecko.
wujek2009
OK już mam mniej więcej zarys w głowie, ale w jaki sposób "przesortować" tablice ARRAY (z rekordami komentarzy) tak aby post dziedziczący był pod właściwym postem? W tej chwili to wyświetla się tak:

Kod
#1 komentarz
#2 komentarz (tu powinien być dziedzic o id #5, #6)
#3 komentarz
#4 komentarz
----- #5 komentarz (powinien pod #2 się znaleźć) [lekko wysunięty*]
----  #6 komentarz (j/w) [lekko wysunięty*]


W pętli foreach przy wyświetlaniu komentarzy dodałem taki wpis:
  1. echo '<li '. ( ($all_txt['wychylenie'] != 0) ? 'style="margin-left: 15px;"' : '') .'> (..) </li>';
muk4
Po każdym komentarzu musisz sprawdzić czy nie ma odpowiedzi na ten komentarz (jeśli zrobiłeś bazę tak jak ja ci powiedziałem):
  1. SELECT * FROM `komentarze` WHERE `reply`= 'id_komentarza_rodzica'
kipero
Ja na Twoim miejscu oparłbym to na drzewku Nested Sets.
http://dev.mysql.com/tech-resources/articl...hical-data.html
http://artykuly.zyxist.com/czytaj.php/drzewa_w_php_i_mysql
wujek2009
kipero pierwszy link pokazuje mi prawidłową strukturę bazy + przykładowy select - taki etap to ja już mam za sobą. Potrzebuje tylko sortowania (patrz post nr#9).

muk4 - strukturę mam tak jak napisałeś; nowa kolumna w tabeli "komentarze" - tylko trochę "niewygodnie" to będzie sprawdzać każdy komentarz czy ma rodzica; szczególnie jak komentarz będzie miał parę rodziców i tylko zwiększę sobie liczbę zapytań.

Cały projekt mam, tylko nie wiem jak "posortować" tablice pobraną - wszystko opisałem w poście #9
muk4
Wyskrobałem takie coś. Z ciekawości chciałem sprawdzić czy zadziała.
  1. function show_comments($news_id, $comm_id=0, $nest_lvl=0){
  2. $margin_value = $nest_lvl*15;
  3. $res = mysql_query("SELECT * FROM `komentarze` WHERE `reply`='$comm_id' AND `news_id`='$news_id' ORDER BY `date`");
  4. if(mysql_num_rows($res) == '0'){ return 0;
  5. }else{
  6. while($koment = mysql_fetch_assoc($res)){
  7. echo "<span style=\"margin-left:{$margin_value}px;\">{$koment['id']} | {$koment['reply']} | {$koment['content']} | {$koment['date']} </span><br />";
  8. show_comments($news_id, $koment['id'], $nest_lvl+1);
  9. }
  10. }
  11. };
  12. //Sposób użycia
  13. //po połączeniu z bazą OFC
  14. $id_newsa = 5; //jakieś tam id newsa, notki
  15. show_comments($id_newsa);


Tak to wygląda u mnie:

OFC zmień sobie jak chcesz tylko zostaw ten margines w spokoju i będzie dobrze 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-2025 Invision Power Services, Inc.