Ještě jednou visual paginator

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Berry
Začátečník | 70
+
0
-

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
+
0
-

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
+
0
-

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.

jtousek
Člen | 951
+
0
-

Klíčové je předání parametrů z paginatoru modelu a tam jejich správné použití v SQL dotazu. Jinak v tom žádná věda neni.