ajax a Visualpaginator v komponentě
- bauer01
- Člen | 30
Ahoj,
jeste porad v nette zacinam a snazim se neco naucit.
Napadlo me si udelat vypis tabulky s uzivateli jako samostatnou komponentu
s visualpaginatorem, ale chtel bych, aby to bylo ajaxově.
Kody mam nasledujici:
uzivatele.php
class uzivatele extends Control
{
public function __construct()
{
parent::__construct();
}
public function createComponentPaginator()
{
$vp = new VisualPaginator();
$vp->paginator->itemsPerPage = 10;
return $vp;
}
public function beforeRender()
{
if ($this->presenter->isAjax())
$this->invalidateControl('vypis_uzivatelu');
}
public function Render()
{
$template = $this->template;
$template->setFile(dirname(__FILE__) . '/uzivatele.phtml');
$template->pridatUzivatele = $this['pridatUzivatele'];
$template->upravitUzivatele = $this['upravitUzivatele'];
$AdministraceModel = new AdministraceModel;
$dataSource = $AdministraceModel->NactiUzivatele();
$this['paginator']->paginator->itemCount = $dataSource->count();
$template->uzivatele = $dataSource->applyLimit($this['paginator']->paginator->itemsPerPage, $this['paginator']->paginator->offset)->fetchAll();
$template->render();
}
}
uzivatele.phtml
{snippet vypis_uzivatelu}
samotna tabulka s vypisem
{control paginator}
{/snippet}
javascript pro uzivatele.phtml mam takto:
<script type="text/javascript">
$('.paginator a').live('click', function(event) {
event.preventDefault();
$.getJSON(this.href);
return false;
});
</script>
Pak si tovarnickou udelam v presenteru komponentu uzivatele a prenesu
widgetem do sablony.
Pokud vypnu javascript tak vse strankuje v pohode, ale zaboha to nemuzu
rozchodit v AJAXu. Nejsem si vsak jistej, jestli muzu v uzivatele.php
invalidovat v beforeRender (takto mi to fungovalo, kdyz byl kod jen na bazi
presenter->sablona).
Ve firebugu žádná chyba vidět není a po kliknutí na stránkovač se nevrací žádný JSON obsah :-(
Poradíte ?
Editoval bauer01 (26. 3. 2010 18:39)
- bauer01
- Člen | 30
zatim snad jo, kdyz jsem do te komponenty pridal jeste moznost smazat uzivatele z vypisu, tak se mi snippet updatuje a uzivatel se poslusne vymaze – paginator ale porad nefunguje, pouze jen v php :-) vypada to pak nejak takhle:
uzivatele.php
class uzivatele extends Control
{
public function __construct()
{
parent::__construct();
}
public function handleSmazatUzivatele($id)
{
$AdministraceModel = new AdministraceModel;
$AdministraceModel->smazatUzivatele($id);
if (!$this->presenter->isAjax())
$this->redirect('this');
else
$this->invalidateControl("vypis_uzivatelu");
}
public function createComponentPaginator()
{
$vp = new VisualPaginator();
$vp->paginator->itemsPerPage = 10;
return $vp;
}
public function beforeRender()
{
if ($this->presenter->isAjax())
$this->invalidateControl('vypis_uzivatelu');
}
public function Render()
{
$template = $this->template;
$template->setFile(dirname(__FILE__) . '/uzivatele.phtml');
$template->pridatUzivatele = $this['pridatUzivatele'];
$template->upravitUzivatele = $this['upravitUzivatele'];
$AdministraceModel = new AdministraceModel;
$dataSource = $AdministraceModel->NactiUzivatele();
$this['paginator']->paginator->itemCount = $dataSource->count();
$template->uzivatele = $dataSource->applyLimit($this['paginator']->paginator->itemsPerPage, $this['paginator']->paginator->offset)->fetchAll();
$template->render();
}
}
a uzivatele.phtml
{snippet vypis_uzivatelu}
samotna tabulka s vypisem
u kazde polozky je odkaz {link SmazatUzivatele!, $uzivatel->ID}
{control paginator}
{/snippet}
Editoval bauer01 (26. 3. 2010 18:30)
- Etch
- Člen | 403
No tak jinak dostane se vůbec na beforeRender()
nejsem si teď
tak úplně jist jestli beforeRender()
je v životním cyklu
Controlu. Dej si do toho třeba
public function beforeRender(){
echo 'test';
exit;
}
EDIT: Jo a ještě prosím pro lepší čitelnost obarvuj kód.
Editoval Etch (26. 3. 2010 18:15)