Ještě jednou visual paginator
- Berry
- Začátečník | 70
Tak jeste jednou, asi jsem lama pac uz nevim co a jak. Rekneme, ze mam blog co je tady v tutorialech a mam tam BlogPresenter
<?php
use Nette\Application\AppForm;
class BlogPresenter extends BasePresenter
{
public function renderDefault()
{
$this->template->posts = PostsModel::fetchAll();
}
public function renderSingle($id = 0)
{
if (!($post = PostsModel::fetchSingle($id))) {
$this->redirect('default'); //article not found
}
$this->template->post = $post;
$this->template->comments = CommentsModel::fetchAll($id);
}
public function createComponentCommentForm($name)
{
$form = new AppForm($this, $name);
$form->addText('author', 'Jméno')
->addRule(AppForm::FILLED, 'Jméno je povinné!');
$form->addTextArea('body', 'Komentář')
->addRule(AppForm::FILLED, 'Komentář je povinný!');
$form->addSubmit('send', 'Odeslat');
$form->onSubmit[] = callback($this, 'commentFormSubmitted');
return $form;
}
public function commentFormSubmitted(AppForm $form)
{
$data = $form->getValues();
$data['date'] = new DateTime();
$data['post_id'] = (int) $this->getParam('id');
$id = CommentsModel::insert($data);
$this->flashMessage('Komentář uložen!');
$this->redirect("this#comment-$id");
}
}
?>
a šablonu
<?php
{block title}
Blog
{/block}
{block content}
<div id="posts">
{if count($posts)}
{foreach $posts as $post}
<div class="post">
<h1>{$post['title']}</h1>
<div class="text">
<small>Přidáno {$post['date']|date}</small>
<p>{$post['body']|truncate:300}</p>
</div>
<div class="read"><a href="{link single $post['id']}">Více…</a></div>
</div>
{/foreach}
{else}
Zatím nebyl napsán žádný článek.
{/if}
</div>
?>
Jak jednoduse zaclenit visual paginator kterej mam v libs/Nette.Addons/VisualPaginator
Diky za jednoduche priklady
Editoval Berry (21. 2. 2011 19:14)
- jtousek
- Člen | 951
Přesný kód psát nebudu, to už bys měl zvládnout sám.
Třída PostsModel
by měla mít nějakou metodu, která vrátí
všechny posty. Tato metoda by měla mít volitelné parametry $limit a
$offset.
Takže, nejdřív si uděláš továrničku pro VisualPaginator (viz stránka
s tímto addonem, komentář úplně dole). V metodě
renderDefault
si tu komponentu načteš (pomocí getComponent,
továrnička ji vytvoří). Z VisualPaginatoru si vytáhneš paginator a
předáš potřebné parametry nové metodě v modelu, která ti vrátí
potřebné záznamy (viz. odstavec Použití na stránce addonu).
No a nakonec ještě přidat {control vp} do šablony.
- Berry
- Začátečník | 70
jtousek napsal(a):
Přesný kód psát nebudu, to už bys měl zvládnout sám.
Třída
PostsModel
by měla mít nějakou metodu, která vrátí všechny posty. Tato metoda by měla mít volitelné parametry $limit a $offset.Takže, nejdřív si uděláš továrničku pro VisualPaginator (viz stránka s tímto addonem, komentář úplně dole). V metodě
renderDefault
si tu komponentu načteš (pomocí getComponent, továrnička ji vytvoří). Z VisualPaginatoru si vytáhneš paginator a předáš potřebné parametry nové metodě v modelu, která ti vrátí potřebné záznamy (viz. odstavec Použití na stránce addonu).No a nakonec ještě přidat {control vp} do šablony.
Takhle nejak jsem to delal. Paginator se mi uz i na strance zobrazil, ale mel jsem nastaveno zobrazit 5 prispevku na strance. Ale zobrazili se mi vsechny. I kdyz jsem na paginatoru klimnul na dalsi stranku, opet vsechny prispevky. No kouknu na to odpoledne. Ted jsem v praci. I tak diky. Snad to rozchodim.