Result selectu v proměnné – výpis/stránkování v komponentě

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

Zdravím.
V presenteru získám vyhovující záznam/záznamy, které odešlu do komponenty kde se zobrazí.
Nevím kolik bude záznamů. Občas muže být pouze 1, občas hodně. Když jich je hodně (víc než 20), tak bych chtěl využít stránkování. Stránkování si zajistím ale nevím jak v komponentě vypíšu zadané rozmezí záznamů:

Presenter:

$aZboziList = $this->context->createZbozi()->order('date DESC');
return new ZboziList( $this->context, $aZboziList );

Komponenta:

public function __construct( $context, $aZboziList )
{
    parent::__construct(); // vždy je potřeba volat rodičovský konstruktor
    $this->context = $context;

    //vyhovující zboží pro zobrazení
    $this->aZboziList = $aZboziList ;
}

public function render()
{
    $this->template->setFile(__DIR__ . '/ZboziList.latte');

    if( count( $this->aZboziList ) >= 20 )
    {
		//jak bych zobrazil jenom prvních 20 záznamů ?????
            // $this->aZboziList - se nechová jako pole, tudíž nemůžu použít $this->aZboziList [0] ...
    }
    else
    {
       $this->template->aZboziList = $this->aZboziList ;
    }
    $this->template->render();
}

Jak získám z **$this->aZboziList ** zadaný počet záznamů(například 0–20, 20–40, …) ?

Díky za rady a nakopnutí :)

Editoval motorcb (22. 5. 2012 11:12)

Ascaria
Člen | 187
+
0
-

Nejprve doporučuju zahodit to:

if() {
// vic jak 20
} else {
// min jak 20
}

To není nejlepší přístup, máš prostě X záznamů a nebo žádný:

if($count > 0) {
// nejake zaznamy
} else {
    $this->flashMessage('Žádné záznamy');
}

Pak doporučuju přečíst nějaký úvod do stránkování, např https://doc.nette.org/…s/pagination .
ad. $count: nejspíš bude potřeba druhý dotaz select count(*) bez limitu a offsetu pro celkový počet

Editoval Ascaria (22. 5. 2012 11:40)

motorcb
Člen | 552
+
0
-

Ascaria:

jenže já chci stránkovat až v komponentě. SQL dotaz nedělám v komponentě. Jen mi do komponenty příjde výsledek dotazu ($aZboziList).
Otázka zní jak z $aZboziList ( $aZboziList = $this->context->createZbozi()->order(‚date DESC‘); ) vyberu 0–20 záznamů aniž bych upravoval SQL dotaz, který se stejně nevykonává v komponentě ale vždycky někde jinde.

Jde to vůbec?

Stránkování vím jak udělat, jen teď potřebuji z $aZboziList získat záznamy od x do y

Editoval motorcb (22. 5. 2012 12:30)

Glottis
Člen | 129
+
0
-

na ten selection normalne muzes aplikovat limit

<?php

$this->aZboziList->limit(20, 0);

?>

nebo se pletu?

motorcb
Člen | 552
+
0
-

Glottis napsal(a):

na ten selection normalne muzes aplikovat limit

<?php

$this->aZboziList->limit(20, 0);

?>

nebo se pletu?

To je wono. Díky moc. Máš u mne pivo :)