Rozdział 20. ♦ Forum 513
Zadaniem funkcji showThreads jest wyświetlenie listy wątków. Ponieważ wątków może być wiele, ta lista będzie musiała być podzielona na osobne strony. Dlatego też funkcja otrzymuje dwa argumenty: page i pageSize. Pierwszy z nich określa, która strona listy ma zostać wyświetlona, natomiast drugi, ile tematów ma być zawartych na jednej stronie. Z podobną sytuacją mieliśmy do czynienia w rozdziale 17. i w analogiczny sposób rozwiążemy problem podziału i nawigacji między stronami.
Na początku pobieramy wszystkie artykuły stanowiące tematy główne forum, wraz z nazwami ich autorów. Jest w tym celu wykonywane zapytanie SQL w postaci:
SELECT Users.Nazwa. Artykuły.Id. Artykuły.Data. Artykuły.Temat FROM Artykuły, Users WHERE Users.Id - Artykuły.Autorld AND Artykuły.Id = Artykuły.Parentld ORDER By Data DESC
Dane są sortowane względem daty w porządku malejącym, tak aby najnowszy temat znajdował się zawsze na początku listy. Liczba wierszy zwróconych przez zapytanie, a tym samym całkowita liczba tematów głównych, jest pobierana za pomocą wywołania funkcji nłysq1_num_rows, a wynik jej działania jest przypisywany zmiennej rowsCount. Następnie jest obliczana całkowita liczba stron, na których zmieszczą się wszystkie tematy. Wynika ona ze wzoru:
całkowita liczba wierszy / liczba wierszy na pojedynczej stronie Jest zatem wykonywana operacja:
$rowsCount / SpageSize
a jej wynik, po zaokrągleniu w górę do najbliższej liczby całkowitej, jest przypisywany zmiennej pagesCount.
Funkcja sprawdza również poprawność przekazanych jej danych. Wiadomo bowiem, że zarówno liczba wierszy na stronie, jak i numer strony do wyświetlenia nie mogą być mniejsze od 1. Dodatkowo numer strony nie może być większy od całkowitej liczby stron. Jeśli zatem zostanie stwierdzone, że wartość argumentu pageSize jest mniejsza od 1, jest mu przypisywana wartość 1 (czynność ta jest wykonywana przed opisanymi wyżej obliczeniami). Podobnie jeśli zostanie stwierdzone, że wartość argumentu page jest mniejsza od 1, jest mu przypisywana wartość 1. Jest również sprawdzane, czy wartość zapisana w page jest większa od pagesCount i, jeśli tak, jest temu argumentowi przypisywana wartość pagesCount.
Po sprawdzeniu poprawności danych jest obliczany numer wiersza w tabeli z wynikami zapytania, od którego ma się rozpocząć wyświetlanie wątków. Numer tego wiersza wynika ze wzoru:
(numer strony - 1) * liczba wierszy na stronie Jest więc wykonywane obliczenie:
(Spage - 1) * SpageSize