Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

Liczba tematów napisanych przez użytkownika wyświetlana pod awatarem

Założony przez  Nexus..

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.
Matslom napisał 14.05.2013, 16:54:
Poprawiłem tytuł
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:
$threadnum $thread['threadnum'];
        
$thread['threadnum'] = my_number_format($thread['threadnum']); 
po
$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 :D

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:
$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:
$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? :)
Polecam właśnie instalację pluginu php in templates -> http://mybbhacks.zingaburga.com/showthread.php?tid=260
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ć
$query $db->query("SELECT * FROM ".TABLE_PREFIX."threads WHERE username=".$nick); 
oraz
$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
<?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:

$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ć:

SELECT COUNT(tid) as num_threads 

i potem użyć fetch_field aby przypisać te num_threads do zmiennej;

lub:

SELECT tid 

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ć:
WHERE uid '$uid' 

(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)...



Użytkownicy przeglądający ten wątek:

3 gości