Stránkování – generování odkazů

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
batneby
Člen | 18
+
0
-

Dobrý den,
pokouším se udělat stránkování ale zasekl jsem se u jedné věci, všechno my funguje ale nechtěj se my generovat linky pro další a předchozí stránky. Linky generuji takto:

function PreviousAll()
    { // BEGIN function Previous
     $previousall = $paginator->page - "1";
     echo $previousall;
    } // END function Previous

    function NextAll()
    { // BEGIN function Next
     $nextall = $paginator->page + "1";
     echo $nextall;
    } // END function Next

Pro představu sem raději dám celý kód:

$count = dibi::query('SELECT COUNT(*) FROM [iconomy]')->fetchSingle();

             $paginator = new Nette\Utils\Paginator;
             $paginator->setItemCount($count); // celkový počet položek (např. článků)
             $paginator->setItemsPerPage(5); // počet položek na stránce
             $paginator->setPage($page); // číslo aktuální stránky, číslováno od 1

             $result = dibi::query('SELECT * FROM [iconomy] %lmt %ofs', $paginator->length, $paginator->offset);
                 if ($all = $result->fetchAll())
                    foreach($all as $row)
                        {
                         echo "<tr>";
                          echo "<td><span class=\"th\">".$row->id."</span></td>";
                          echo "<td><span class=\"th-img\"><img src=\"api/HeadSkin.php?mc=".$row->username."&px=50\"></span></td>";
                          echo "<td><span class=\"th\">".$row->username."</span</td>";
                          echo "<td><span class=\"th\">".$row->balance."</span</td>";
                         echo "</tr>";
                        }

function PreviousAll()
    { // BEGIN function Previous
     $previousall = $paginator->page - "1";
     echo $previousall;
    } // END function Previous

    function NextAll()
    { // BEGIN function Next
     $nextall = $paginator->page + "1";
     echo $nextall;
    } // END function Next

    if ($paginator->pageCount > 1) {
     echo "<ul class=\"pure-paginator\">";

      if ($paginator->isFirst()) {
       echo "<li><span class=\"pure-button prev pure-button-active\">«</span></li>";
      }
       else {
        echo "<li><a class=\"pure-button prev\" href=\"".PreviousAll()."\">«</a></li>";
       }
        if ($paginator->isLast()) {
         echo "<li><span class=\"pure-button next\">»</span></li>";
        }
         else {
          echo "<li><a class=\"pure-button next pure-button-active\" href=\"".NextAll()."\">»</a></li>";
         }
     echo "</ul>";
    }

Snad se v tom vyznáte :).
Budu rád za každou radu, děkuji.

MartinitCZ
Člen | 580
+
0
-

Můžeš se inspirovat zde:
https://componette.org/search/?…

batneby
Člen | 18
+
0
-

martinit napsal(a):

Můžeš se inspirovat zde:
https://componette.org/search/?…

Ano ale to je pro starou verzi nette a linky tam jsou generovány v systému šablon já to potřebuju generovat v PHP.

David Matějka
Moderator | 6445
+
0
-

proc to potrebujes generovat takhle hnusne a nemuzes pouzit visual paginator?

krom toho, v tech fcich opravdu nemuzes takhle sahnout na $paginator

batneby
Člen | 18
+
0
-

matej21 napsal(a):

proc to potrebujes generovat takhle hnusne a nemuzes pouzit visual paginator?

krom toho, v tech fcich opravdu nemuzes takhle sahnout na $paginator

visual paginator by sem použil rád ale pro verzi nette 2.1.0 nefunguje :(

David Matějka
Moderator | 6445
+
0
-

mel by byt jen problem v importech, zus tuhle upravenou verzi, snad je ok..

batneby
Člen | 18
+
0
-

matej21 napsal(a):

mel by byt jen problem v importech, zus tuhle upravenou verzi, snad je ok..

Dík zkusím to :).

batneby
Člen | 18
+
0
-

Úplně jsem se v tom ztratil můžeš my sem prosím hodit kód na to generováni příspěvků?
Myslím tenhle:

$count = dibi::query('SELECT COUNT(*) FROM [iconomy]')->fetchSingle();

             $paginator = new Nette\Utils\Paginator;
             $paginator->setItemCount($count); // celkový počet položek (např. článků)
             $paginator->setItemsPerPage(5); // počet položek na stránce
             $paginator->setPage($page); // číslo aktuální stránky, číslováno od 1

             $result = dibi::query('SELECT * FROM [iconomy] %lmt %ofs', $paginator->length, $paginator->offset);
                 if ($all = $result->fetchAll())
                    foreach($all as $row)
                        {
                         echo "<tr>";
                          echo "<td><span class=\"th\">".$row->id."</span></td>";
                          echo "<td><span class=\"th-img\"><img src=\"api/HeadSkin.php?mc=".$row->username."&px=50\"></span></td>";
                          echo "<td><span class=\"th\">".$row->username."</span</td>";
                          echo "<td><span class=\"th\">".$row->balance."</span</td>";
                         echo "</tr>";
                        }

Ale předělaný do toho visual paginatoru.

David Matějka
Moderator | 6445
+
0
-

proc to rovnou echujes? ty to nemas v presenteru nebo co?

batneby
Člen | 18
+
0
-

Ne nemám chci to co nejlehčí ;)

David Matějka
Moderator | 6445
+
0
-

nejlehci to budes mit, kdyz si to zprovoznis kompletne s presenterema atd. nebo si myslis, ze se nette vytvorilo, abychom mohli psat aplikace co nejkomplikovaneji? :)

Editoval matej21 (3. 1. 2014 0:02)

batneby
Člen | 18
+
0
-

Jenže já vůbec nevím jak to s těma presenterema udělat, ani pořádně nevím co to je. Proto to chci udělat takhle aby jsem to už měl hotoví.

Pavel Macháň
Člen | 282
+
0
-

batneby napsal(a):

Jenže já vůbec nevím jak to s těma presenterema udělat, ani pořádně nevím co to je. Proto to chci udělat takhle aby jsem to už měl hotoví.

Raději si najdi 1 den čas na prostudování a rovnou to udělej s prezenterama a šablonama. Sice zabiješ čas studiem, ale milionkrát se ti to vrátí. Místo hodiny datlení napíšeš pár řádků a můžeš jít ven na pivo.

EDIT: můžeš mrknout třeba na https://github.com/nette/sandbox a na něm si to otestovat

Editoval EIFEL (3. 1. 2014 0:12)

batneby
Člen | 18
+
0
-

A kde ty prezenty najdu?

batneby
Člen | 18
+
0
-

Aha tak jsem si něco málo přečetl, samozřejmě to ještě všechno nastuduji ale rozhodl jsem se že tuto aplikaci do prezenteru dávat nechci chci to nechat generovat pomocí echo. Vím že je to dost divné ale po uvažování sem se rozhodl že by sem chtěl tuto aplikaci udělat pomocí jednoduchého PHP :).

akadlec
Člen | 1326
+
0
-

tak když to děláš pomocí čistého php proč se ptáš na nette?

A jen tak mimochodem, ve funkci voláš paginator ale nikde jej nemáš definovaný.

Editoval akadlec (3. 1. 2014 13:16)

batneby
Člen | 18
+
0
-

Docela blbá otázka ne?
To stránkování je přes nette.

akadlec
Člen | 1326
+
0
-

Ani bych neřek. To na co to používáš ty je jen je jednoduchý výpočet a nevidím teda důvod to řešit helpery z nette když samotné nette nepoužiješ. Jinak jak jsem psal, používáš proměnné které nikde neinicializuješ.