![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 20.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam do wszystkich prośbę jak coś takiego wykonać w smarty? SQL/php
Smarty:
Ten post edytował gandziorz 22.01.2007, 01:14:40 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Robisz sekcję i w niej alternatywę: jeżeli nie jest wyświetlany link do aktualnej strony, to dajesz link w jednej formie, a jeżeli to jest aktualna strona, to w innej. Dalsze błędy masz w samym skrypcie:
Otwieramy skrypt na jakiejś stronie i zapytanie zwraca Ci np. 20 rekordów (bo tyle na niej się maksymalnie mieści). Później robisz mysql_num_rows() i on Ci tę liczbę "20" zwraca. Na jej podstawie później próbujesz obliczyć, ile stron trzeba zrobić. To oczywiste, że tak wykonany skrypt zawsze Ci da w rezultacie link do jednej strony. Polecam napisać sobie jakieś uniwersalne rozwiązanie, np. klasę, do której tylko przekazujesz parametry, np. ilość elementów, ilość elementów na stronie oraz link, a ona już automatycznie dba o wygenerowanie listy stron, a nawet ułożenie fragmentu zapytania SQL (naturalnie wszystkie wartości do niego są przeliczane przez skrypt, więc nie ma obawy o SQL Injection). Jej użycie wygląda mniej więcej w ten sposób:
Jeśli chodzi o szablonowe rozwiązanie tego problemu, dodam, że OPT posiada odpowiednią instrukcję do osadzania w szablonie list strony: Kod <p>{pagesystem name="ps"} {page}[ <a href="{@url}">{@title}</a> ]{/page} {active}[ <strong><a href="{@url}">{@title}</a></strong> ]{/active} {separator}...{/separator} {/pagesystem}</p> Do jego obsługi potrzebna jest właśnie jakaś klasa stronicująca, która implementuje odpowiedni interfejs. Jak się często stronicowania używa, można sobie te wszystkie znaczniki {page} itd. przenieść do osobnego pliku i później jedynie importować. Ten post edytował Zyx 22.01.2007, 08:04:09 -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]() ![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 20.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Możesz mi wyjaśnić co tutaj robi np. 30 i jakasstrona.php?
Hmnn czyli jak to ma być jeżeli adres ma być kategoria,9,STRONA.html (strona np. 1,2,3,4,5,6 ...) a nazwa tylko liczba strony np. 1,2,3... |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Ad. 1 - przecież napisałem to
![]() Cytat (łączna) ilość elementów, ilość elementów na stronie oraz link Link, do którego mają prowadzić strony. Moja klasa dokleja do niego numer strony automatycznie. Ad. 2 - właśnie tak, jak podaję (przypominam, że to jest OPT, a nie Smarty ![]() -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]() ![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 20.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Z czym konkretnie masz problem? Chodzi o napisanie klasy, tudzież mechanizmu do dzielenia na strony? OK, najprostszy z możliwych tutorial. Zakładam, że w adresie URL przesyłasz numer strony. Teraz mamy prostą arytmetykę:
Zapytanie SQL:
Wyświetlanie: jeżeli chcesz generować to po stronie php, to sobie zrób tablicę np. $pageList o takiej strukturze, że indeks oznacza numer strony, a wartość link. Teraz zrób sobie funkcję służącą do dopisywania do niej wartości z uwzględnieniem zakresu tablicy (tj. żeby numer strony nie był mniejszy od 1 lub większy od $pages). Do tablicy wpisujesz: stronę pierwszą, stronę ostatnią oraz zakres np. od $active-3 do $active+3 - czyli siedem stron będących w otoczeniu $active. Algorytm wyświetlania jest taki: sortujesz te elementy z zachowaniem indeksów (jest odpowiednia funkcja w php do tego) i jedziesz po nim pętlą foreach. Generujesz kod HTML dla każdej strony wraz z linkiem i pamiętasz cały czas w zmiennej numer poprzedniej strony. Jeżeli na początku pętli stwierdzisz, że poprzedni i obecny numer różnią się o więcej niż 1, to mamy przerwę w numeracji i w tym miejscu dodatkowo wstawiasz wielokropek. Wysyłasz to potem do parsera. Ewentualnie wyświetlanie możesz po stronie szablonu zaprogramować, ale nie wiem, jaki by to miało sens - później miałbyś strasznie dużo kopiowania tego i współczułbym Ci, gdybyś chciał np. to później popoprawiać ![]() Klasę stronicującą opartą na tym pomyśle napisałem już dawno temu - wiem, że w którymś artykule moim zamieściłem jej pełen kod źródłowy (tyle że jeszcze w wersji na PHP4). Dołączyłem ją też do Open Power Template'a, tyle że z mechanizmem wyświetlania przerobionym pod ten system szablonów. -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 16:15 |