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%)
-----


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:

  1. <?php
  2. $sql = "SELECT * FROM ogloszenia WHERE kategoria='$kat' AND status=3 ORDER BY id DESC LIMIT $str1, $str2";
  3. if($res = mysql_query ($sql)) {
  4. $znalazl = mysql_num_rows($res);
  5. ?>


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:

  1. <?php
  2. $ps = new pagesystem($sql -> get('SELECT COUNT(id) FROM tabela'), 30, 'jakasstrona.php');
  3. $stmt = $sql -> query('SELECT * FROM tabela '.$ps -> getLimit());
  4.  
  5. // tutaj sobie pobieramy wyniki
  6.  
  7. // a tu generujemy listę stron
  8. $tpl -> assign('pages', $ps -> make());
  9. ?>


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
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: 13.10.2025 - 01:31