Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z smarty, (linki do stron np. Przejdź do strony: 1,2,3...)
gandziorz
post
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
  1. <?php
  2. //(...)
  3. $strona = (int)$_GET['strona'];
  4. if (empty($strona) or $strona==1) {
  5. $strona = 1;
  6. $str1 = 1;
  7. $str2 = 20;
  8. } else {
  9. $str1 = $strona*20-19;
  10. $str2 = $strona*20;
  11. }
  12.  
  13. //pobieranie danych wg. kryteriow
  14. $sql = "SELECT * FROM ogloszenia WHERE kategoria='$kat' AND status=3 ORDER BY id DESC LIMIT $str1, $str2";
  15. if($res = mysql_query ($sql)) {
  16. $znalazl = mysql_num_rows($res);
  17. $stron = @floor($znalazl/20);
  18. if ($stron < 1) {
  19. $stron = 1;
  20. } elseif ($strona > $stron) {
  21. $strona = $stron;
  22. }
  23. for ($i=1; $i<$stron; $i++) {
  24. $strony = $i;
  25. }
  26. for ($i=1; $i<$znalazl; $i++) {
  27. $wiersz = mysql_fetch_array($res);
  28. $ogloszenia[$i] = $wiersz;
  29. }}
  30.  
  31. $smarty->assign ('ogloszenia', $ogloszenia);
  32. $smarty->assign ('strona', $strona);
  33. $smarty->assign ('stron', $stron);
  34. $smarty->assign ('strony', $strony);
  35. $smarty->assign ('katstr', $kat);
  36. $smarty->assign ('str1', $str1);
  37. $smarty->assign ('str2', $str2);
  38. $smarty->display ('ogloszenia.tpl');
  39. ?>


Smarty:
  1. {section name=a loop=$strony}
  2. <a href="kategoria,{$katstr},{$strony[a]}.html">{$strony[a]}</a>
  3. {if $strona == $strony[a]}
  4. <b><a href="kategoria,{$katstr},{$strony[a]}.html">{$strony[a]}</a></b>
  5. {/if}
  6. {/section}


Ten post edytował gandziorz 22.01.2007, 01:14:40
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Zyx
post
Post #2





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ę:

  1. <?php
  2. // Poniższe zmienne należy sobie samemu zainicjować, tu dałem przykładowe wartości
  3. $positions = 38458; // tyle mamy elementów
  4. $ppp = 40; // tyle elementów chcemy mieć na jednej stronie
  5. $active = 4; // ta strona jest aktywna
  6.  
  7. $mod = $positions % $ppp;
  8. $pages = ($positions - $mod) / $ppp;
  9. if($mod > 0)
  10. {
  11. $pages++;
  12. }
  13.  
  14. if($active < 1)
  15. {
  16. $active = 1;
  17. } 
  18. if($active > $pages)
  19. {
  20. $active = $pages;
  21. }
  22.  
  23. // i w $pages masz łączną ilość stron
  24. ?>


Zapytanie SQL:

  1. <?php
  2. $pdo -> query('SELECT * FROM ogloszenia WHERE kategoria=''.$kat.'' AND status=3 LIMIT '.(($active - 1) * $ppp).', '.$ppp);
  3. ?>


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ć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

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.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 15:22