Ako spojazdniť VisualPaginator
- Čamo
- Člen | 798
No nazdar zase.
Tak sa snažím spojazdniť VisualPaginator podľa tohoto
návodu, ale nedarí sa mi.
- Do zložky app/components som skopíroval adresár NasExt.
- Do presenteru som podľa návodu vložil
public function renderDefault($page)
{
$countAll = $this->database->table('posts')
->where('visible = ?', 1)
->count('*');
/** @var NasExt\Controls\VisualPaginator $vp */
$vp = $this['vp'];
$paginator = $vp->getPaginator();
$paginator->itemsPerPage = 5;
$paginator->itemCount = $countAll;
$fooList->limit($paginator->itemsPerPage, $paginator->offset);
$this->template->posts = $this->database
->table('posts')
->select('posts.*, users.username')
->order('created_at DESC')
->limit($paginator->itemsPerPage, $paginator->offset);
}
/**
* @return NasExt\Controls\VisualPaginator
*/
protected function createComponentVp($name)
{
$control = new NasExt\Controls\VisualPaginator($this, $name);
// enable ajax request, default is false
//$control->setAjaxRequest();
$that = $this;
$control->onShowPage[] = function ($component, $page) use ($that) {
if($that->isAjax()){
$that->invalidateControl();
}
};
return $control;
}
No a ladenka píše: „Class
‚App\Presenters\NasExt\Controls\VisualPaginator‘ not found“
Nechápem že to hľadá v app/presenters , ale ani keď to skopírujem do
zložky presenters(čo nechcem).
- David Matějka
- Moderator | 6445
Ne, ono to nehleda ve slozce app/presenters, ale v namespace App\Presenters,
pridej na zacatek souboru do importu (pod namespace App\Presenters
)
kod: use NasExt;
a precti si neco o namespacech http://www.php.net/…ationale.php
Editoval matej21 (10. 6. 2014 16:19)
- duskohu
- Člen | 778
@Čamo pokial nebudes pouzivat ajax tak tuto cast nepotrebujes. Sluzi to na to aby si zapol ajax, a nasledne ked ajax prebehne invalidoval snippet. Neviem ake nette pouzivas, ale od 2.1 sa uz pouziva miesto „invalidateControl“ >> „redrawControl“
// enable ajax request, default is false
//$control->setAjaxRequest();
$that = $this;
$control->onShowPage[] = function ($component, $page) use ($that) {
if($that->isAjax()){
$that->invalidateControl();
}
};
- Jan Suchánek
- Člen | 404
@duskohu: Nebylo byl lepší?
/**
* @var \App\Control\IVisualPaginatorFactory
* @inject
*/
public $visualPaginatorFactory; // vytvořit v config.neon
/**
* @return NasExt\Controls\VisualPaginator
*/
protected function createComponentVp()
{
$control = $this->visualPaginatorFactory->create();
$control->onShowPage[] = $this->showVisualPaginator;
return $control;
}
/**
* @var NasExt\Controls\VisualPaginator
* @var int
*/
protected function showVisualPaginator($control, $page)
if($this->isAjax()){
$this->redrawControl(); // $this->invalidateControl() depricated
}
}
a k čemu je tam to $page?
Editoval jenicek (10. 6. 2014 17:05)
- duskohu
- Člen | 778
@jenicek VisualPaginator nema ziadnu zavyslost takze
nepotrabuje nic z DI, tym padom naco factory? Netreba nic prehanat a za kazdu
cenu vsetko davat do containeru.
Ako si zavolas udalost onShowPage je uz na kazdom v dokumentaci som uviedol
anonymnu funkciu, ked sa ti viac paci volat dalsiu metodu, kludne aj tak.
To page je tam preto keby si chcel nejako dalej pouzit aktualnu page na nejake
spracovanie, samozrejme sa da zavolat aj $control->page, ale mas tu moznost
aj cez udalost, to je tiez uz na tom ako to chces pouzit.
- duskohu
- Člen | 778
@Čamo generuje to take url lebo VP pouziva persistent parameter page, vp ja nazov komponenty createComponentVP, ked si ju pomenujes inak budes tam mat nazov aky chces, do=vp-showPage je volanie signalu v komponente vp a signal sa vola showPage. Takze v podstate ani nie, ked zacnes pouzivat ajax, tak to v url mat nebudes.
- Jan Suchánek
- Člen | 404
@duskohu: Počkej, no pokud budeš používat stránkovadlo na více místech (komponentach, presenterech) atp tak se factory v configu vyloženě hodí, nebo je lepší použít traitu podobně jako to má @Šaman?
Editoval jenicek (10. 6. 2014 17:53)
- Pavel Macháň
- Člen | 282
Čamo napsal(a):
duskohu:
Celý ten blok nepotrebujem? Ja som zakomentoval, len ten jeden riadok…Ale momentálne ma viac trápia adresy aké to generuje
homepage?vp-page=13&do=vp-showPage.
Dá sa to nejako upraviť? Niesom si istý, či by som to dokázal upraviť.
Stačí si upravit routu nějak takhle
new Route('<presenter>[/<vp-page>]', 'Homepage:default');
Takže pak budeš mít url /homepage/3
- Čamo
- Člen | 798
duskohu:
Díky moc. To je tvoja komponenta?
EIFEL:
Paráda! Len mi tam ešte ostalo
`?do-vp-showPage `
a toto mi nepomohlo:
$router[] = new Route('<presenter>[/<vp-page>[/do]]', 'Homepage:default');
Chcel by som tú adresu bez toho.
Vlastne by som sa chcel spýtať, či sa komponenty(signály) dajú volať aj
z presentera.
Proste sa zavolá stránka homepage/10 a presenter spustí onShowPage a predá
číslo stránky.
Či čo som zase mimo?
Editoval Čamo (10. 6. 2014 19:54)
- duskohu
- Člen | 778
@Čamo ?do-vp-showPage sa da obabrat tak ze v sablone vsade kde je "href={link $handle… pouzijes n:href="this, … ako je to tu , ale tym padom ti nepojde ajax, resp, ajax si budes musiet poriesit inde a nie cez udalost onShowPage
Editoval duskohu (10. 6. 2014 20:58)
- Jan Suchánek
- Člen | 404
@duskohu:
- nemusím psát new VisualPaginator
- mohu mít stránkování na víc komponent, například výpis článků a výpis fotek na jedné stránce
- natavuju $limit
- mohu nastavit i další parametry např. povolené limity
- duskohu
- Člen | 778
@jenicek
- odporucam prejst si QuickStart
- Dokumentace
ja viem ze je to na zaciatok dost vela informacii, ale oplati sa to precitat, kazdy nejako zacinal a musel si tym skor ci neskor prejst
- new VisualPaginator musis pisat ked vytvaras tovarnicku
- mozes mat VP na viac datovych zdrojov (clanky, fotky,…) pre kazdy zdroj si urob komponentu VP
$countAll1 = $this->database->table('posts');
/** @var NasExt\Controls\VisualPaginator $vp */
$vp1 = $this['vp1'];
$paginator1 = $vp1->getPaginator();
$paginator1->itemsPerPage = 5;
$paginator1->itemCount = $countAll1;
$fooList1->limit($paginator1->itemsPerPage, $paginator1->offset);
$countAll2 = $this->database->table('foto');
/** @var NasExt\Controls\VisualPaginator $vp */
$vp2 = $this['vp2'];
$paginator2 = $vp2->getPaginator();
$paginator2->itemsPerPage = 5;
$paginator2->itemCount = $countAll2;
$fooList2->limit($paginator2->itemsPerPage, $paginator2->offset);
protected function createComponentVp1()
{
$control = $this->visualPaginatorFactory->create();
$control->onShowPage[] = $this->showVisualPaginator;
return $control;
}
protected function createComponentVp2()
{
$control = $this->visualPaginatorFactory->create();
$control->onShowPage[] = $this->showVisualPaginator;
return $control;
}
ale ten router ti uz nepojde tak ako bolo spemenute hore
poslednym 2 otazkam velmi nerozumiem
- Jan Suchánek
- Člen | 404
@duskohu: Já bych to právě dělal samostatnejma komponentama (photos, posts) a právě proto bych měl tu komponentu i pro stránkování na jediném místě a na tvorbu bych používal trait jako Šaman.
$selection = $this->postRepository->findAll();
/** @var NasExt\Controls\VisualPaginator $vp */
$paginator = $this['vp']->getPaginator();
$paginator->itemsPerPage = 5; // tohle bych nechal na config
//$paginator->allowedLimits = array(5,10, 20); // já používm i tohle a v configu
$paginator->itemCount = $selection->count();
$selection->limit($paginator->itemsPerPage, $paginator->offset);
Dokumentaci i quickstart projdu vždy tam něco najdu.
Editoval jenicek (10. 6. 2014 23:09)
- duskohu
- Člen | 778
@jenicek saman ma tu trajtu len na inject, cize z DI contajneru si injectne factory, ale komponentu vytvorit musi, kedze VP nieje v DIC contajneru, neni to treba kedze nema zavyslosti tak inject nepotrebujes, staci pouzit:
$control = new NasExt\Controls\VisualPaginator($this, $name);
kedze pre post a fotos mam zvlast komponentu , tak v nej si vytvor dalsiu komponentu VP, kazda potrebuje zvlast instanciu
inak tam hore som dal zle:
$control = $this->visualPaginatorFactory->create();
// miesto toho pouzi
$control = new NasExt\Controls\VisualPaginator($this, $name);
- Jan Suchánek
- Člen | 404
@duskohu: já vim že to má na inject protected vlastnosti, to $this, $name tam být nemusí ne?
new NasExt\Controls\VisualPaginator($this, $name);
new NasExt\Controls\VisualPaginator;
Editoval jenicek (10. 6. 2014 23:29)
- Čamo
- Člen | 798
Sorry, že zase otravujem, ale potrebujem vysvetliť jednu vec:
Zmenil som si šablonu, tak aby generovala odkazy v tvare: homepage/10
podľa routy <presenter>[/vp-page]
Všetko funguje a problém je v tom, že ja nechápem ako. Nechápem ako sa po
odstránení parametru ?do-vp-showPage môže spustiť metóda showPage. Načo
tam teda to do pred tým bolo? dokumentáciu čítam už asi tretí krát a
stále nič.
Editoval Čamo (11. 6. 2014 21:42)
- Čamo
- Člen | 798
Takže ako som zistil existuje čosi ako životný cyklus komponenty a
v ňom sa volá metóda loadState, ktorej implementácia v triede
presenterComponent (z ktorej control dedí), nastavuje objektu $this parametre
podľa persistentných premenných.
Mám v tom zmetok, čakal som že render bude prímať parameter $page a
nechápem, prečo ten persistent. Ťažko sa to číta…
- duskohu
- Člen | 778
Persistentní
parametry
Signál
Ten loadState sa vola stale, ale ten signal do-vp-showPage tam bol koli tomu aby
sa dala zavolat "udalost ":https://doc.nette.org/…/smartobject#…
pomocou ktorej si si v tovarnicke invalidoval snippet