Witam.
Wpadłem na pewien pomysł, który przydał by się mi na moim forum, ale pewnie przydałby się także innym.
Przechodząc do tematu, modyfikacja pobierała by ilość tematów utworzonych przez owego użytkownika.
Po czym przekazywała tą informacje, do informacji o użytkowniku, w poście (zaraz pod liczbą postów).
Czy mógłby ktoś mi podpowiedzieć, jak takową modyfikację utworzyć?
Pozdrawiam.
Mi się co jedynie udało zrobić to napisz "Liczba tematów:", lecz nie wiem jak zrobić tak aby ściągało tematy użytkownika. :/
Dodałem:
Kod PHP:
$threadnum = $thread['threadnum'];
$thread['threadnum'] = my_number_format($thread['threadnum']);
po
Kod PHP:
$postnum = $post['postnum'];
$post['postnum'] = my_number_format($post['postnum']);
W pliku functions_post.php i dodałem zmienną (do szablonu postbit_author_user) {$thread['threadnum']} i pojawiło się 0. Nie wiem czy dobrze zrobiłem, ale coś już się pojawia
Ps. Liczba nie zwiększa się po dodaniu nowego tematu.
Jako, że nie ma żadnego podliczania tematów napisanych przez użytkownika i trzymania tego w bazie trzeba po prostu liczyć ile jest wierszy spełniające warunek user = nick. Samo zapytanie wyglądałoby tak:
Kod PHP:
$query = $db->query("SELECT * FROM ".TABLE_PREFIX."threads WHERE username=".$nick);
Oczywiście pod zmienną $nick musi kryć się nick użytkownika.
No i teraz obliczenie ile wierszy spełnia ten warunek:
Kod PHP:
$topics = $db->num_rows($query);
Pod zmienną topics znajduje się teraz liczba wątków napisanych przez $nick
Powiedziałbyś jak to zastosować?
I czy to się gdzie wkleja do functions_post.php? Jestem w tym kompletnie zielony.
Ja to preferuje plugin do takich zastosowań, ale można także użyć phpintemplates i wkleić kod php do szablonu posta.
Właśnie w tych sprawach także nie jestem zaawansowany.
Ale co nie co potrafię edytować
Poza pisaniem pluginu, jest możliwość by wprowadzić takową zmienną?
Bo Matslom, napisał kawałek kodu od moda? Tak?
To nie ma znaczenia, czy ten kod użyjesz w pluginie, czy w szablonie, czy dodasz do plików MyBB (chyba najgorsze rozwiązanie). Wszędzie będzie działał.
Mhym. ;>
Czyli gdzie Twój kod mogę wkleić by działał poprawnie?
Miałem ten plugin, ponieważ instalowałem styl kwiecia, aczkolwiek nie przypadł mi do gustu.
Jeśli go mam, to teraz, mam do postbit_author dorzucić
Kod PHP:
$query = $db->query("SELECT * FROM ".TABLE_PREFIX."threads WHERE username=".$nick);
oraz
Kod PHP:
$topics = $db->num_rows($query);
?
@Up Nie sądzę bo ja miałem ten plugin dodałem to, ale nic nie dało.
Musisz kod php wstawiać między znacznikami
Kod:
<?php tutaj kod php; ?>
Użyłem tego w <?php ?> to mi wyskoczył błąd SQL. Po za tym ja nie polecam tego pluginu (PHP in templates), ponieważ u mnie (czy tylko?) zachodzi konflikt między nim a skryptem i nie działa "auto-odświeżanie" postów użytkowników.
U mnie to samo co u gibona. Po wklejeniu tego, ukazał się błąd SQL.
Any ideas? ;(
Ja się podepnę do tematu, bo
herezje czynicie istne
To zapytanie jest do bólu złe:
Kod PHP:
$query = $db->query("SELECT * FROM ".TABLE_PREFIX."threads WHERE username=".$nick);
1. Co ono robi? Pobiera wszystkie dane o tematach. A co nam potrzebne? Ich ilość... Lepiej więc zrobić:
Kod PHP:
SELECT COUNT(tid) as num_threads
i potem użyć fetch_field aby przypisać te num_threads do zmiennej;
lub:
i jak w poprzednich postach użycie metody num_rowsc(tj. $db->num_rows). Pierwsze metoda przy dużych ilościach tematów może okazać się wolniejsza (mowa o tysiącach per user), druga za to zajmie więcej pamięci.
2. Pole username nie jest indeksem. W wyniku tego zapytanie sprawdzi zawsze i tak wszystkie rekordy w tabeli threads. Jest to ciąg znaków, więc porównywanie będzie jeszcze wolniejsze. Przecież jest do dyspozycji numer usera, indeksowany, więc zapytanie aż prosi się aby tego użyć:
(oczywiście trzeba ten uid autora postu skądś wziąć, pewnie jest w $postbit albo czymś tego rodzaju).
Może i czepiam się detali, ale spójrzcie na to - mamy forum z np. 5 000 tematów. Na stronie tematu wyświetlamy 15 postów. Baza sprawdzi więc i pobierze sumarycznie dane jak dla 75 000 tematów (dla każdego usera sprawdzi wszystko)...