Ako upravit kod do best practice

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

Zdravim, mam tento kod

public function actionGenre($slug, $page = 1) {
    if(!$this->genre = $this->genreFacade->findBySlug($slug))
        $this->error("Genre not found");

    $paginator = new Nette\Utils\Paginator;
    $paginator->setItemCount(count($this->genre->serials));
    $paginator->setItemsPerPage(1);
    $paginator->setPage($page);

    $this->template->serials = $this->genre->serials->slice($paginator->getOffset(), $paginator->getItemsPerPage());

    $this->template->paginator = $paginator;

}

public function renderGenre()
{
    $this->template->genre = $this->genre;
}

nepaci sa mi ze tam pouzivam **slice **aj ze template definujem v action aj v render.. co si myslite ako by sa to dalo lepsie zapisat aj ten **paginator **na tu **manytomany **asociaciu?

v latte

{layout '../@layout.latte'}
{block content}
    <div class="jumbotron movies">
        <h1><span>Serialy v kategorii &bdquo;</span>{$genre->name}<span>&ldquo;</span></h1>

        {control videoList $serials}

        <nav aria-label="pagi" class="text-xs-center">
            <ul class="pagination">
                <li class="page-item {if $paginator->page <= $paginator->firstPage}disabled{/if}">
                    <a class="page-link" n:href="this $genre->slug, $paginator->page - 1" tabindex="-1" aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                        <span class="sr-only">Previous</span>
                    </a>
                </li>
                {for $i = $paginator->firstPage; $i <= $paginator->lastPage; $i++}
                    {if $i == $paginator->page}
                        <li class="page-item active">
                            <a class="page-link" n:href="this $genre->slug, $i">{$i} <span class="sr-only">(current)</span></a>
                        </li>
                    {else}
                        <li class="page-item"><a class="page-link" n:href="this $genre->slug, $i">{$i}</a></li>
                    {/if}
                {/for}
                <li class="page-item {if $paginator->page >= $paginator->lastPage}disabled{/if}">
                    <a class="page-link" n:href="this $genre->slug, $paginator->page + 1" tabindex="-1" aria-label="Next">
                        <span aria-hidden="true">&raquo;</span>
                        <span class="sr-only">Next</span>
                    </a>
                </li>
            </ul>
        </nav>
    </div>
{/block}

Za rady dakujem, trapim sa s tym uz par dni ale neviem na to prist

F.Vesely
Člen | 369
+
0
-

Tak pokud pouzivas Kdyby/Doctrine, tak se zkus podivat na QueryObject a ResultSet Vyberes si pouze serialy podle zanru a aplikujes na to Paginator.

CZechBoY
Člen | 3608
+
0
-

Paginator bych převedl na/použil existující vizuální komponentu.
Taky existuje n:class, takže nemusíš používat ify vně atributů.

Tomáš Votruba
Moderator | 1114
+
0
-

@erikbalog Jestli to hodíš na Github na Gist, pošlu ti PR, co bych zlepšil :)

erikbalog
Člen | 27
+
0
-

F.Vesely napsal(a):

Tak pokud pouzivas Kdyby/Doctrine, tak se zkus podivat na QueryObject a ResultSet Vyberes si pouze serialy podle zanru a aplikujes na to Paginator.

to ma tiez napadlo ale nedokazal som zostavit DQL na to „$genre + $genre->serials“

erikbalog
Člen | 27
+
0
-

CZechBoY napsal(a):

Paginator bych převedl na/použil existující vizuální komponentu.
Taky existuje n:class, takže nemusíš používat ify vně atributů.

to tam aj dam lenze logika paginatora je rovnaka vzdy limit a offset .. a to potrebujem zistit ako vybrat $genre, a pridat limit a offset na asociaciu ManyToMany $genre->serials

erikbalog
Člen | 27
+
0
-

Tomáš Votruba napsal(a):

@erikbalog Jestli to hodíš na Github na Gist, pošlu ti PR, co bych zlepšil :)

https://gist.github.com/…16ce30476293

budem ti vdacny