Reset persistentního parametru napříč různým action

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

Zdravím,

při testování aplikace jsem narazil na drobný problém. Mám HomepagePresenter, který obsahuje různé View metody (a k tomu i odpovídající action metody), které jsou na sobě nezávislé, ovšem používají společný persistentní parametr $page kvůli shodnému stránkování. Problém je, že když je uživatel např. na nějakém view, tak mění hodnotu $page (zvyšuje z defaultní jedničky) a když potom chce přejít na další view, tak se mu ten persistentní parametr samozřejmě neresetuje zpěz na výchozí hodnotu 1, ale zůstává stejný a tím pádem dochází k chybné matematice stránkování. Jako poslední řešení mám rozdělit view a action metody do samostatných presenterů, tomu bych se však chtěl vyhnout.

Zdrojový kód HomepagePresenteru:

class HomepagePresenter extends BasePresenter {

    const ARTICLES_PER_PAGE = 11;

    private $articleFacade;
    private $userFacade;
    private $tagFacade;
    private $paginator;

    /** @var int @persistent */
    public $page = 1;

    public function injectArticleFacade(ArticleFacade $articleFacade) {
        $this->articleFacade = $articleFacade;
    }

    public function injectAuthorFacade(UserFacade $userFacade) {
        $this->userFacade = $userFacade;
    }

    public function injectTagFacade(TagFacade $tagFacade) {
        $this->tagFacade = $tagFacade;
    }

    public function actionDefault() {
        $articlesCount = $this->articleFacade->getAllCount();
        $this->paginator = new Paginator($articlesCount, self::ARTICLES_PER_PAGE);
        $this->template->paginator = $this->paginator;
    }

    public function renderDefault() {
        try {
            $this->template->articles = $this->articleFacade->findAll($this->paginator->getPageLimit());
        } catch (EntityNotFoundException $ex) {
            \Tracy\Debugger::log($ex);
            $this->template->articles = false;
        }
    }

    public function actionCategory($id) {
        $articlesCount = $this->articleFacade->getByCategoryCount($id);
        $this->paginator = new Paginator($articlesCount, self::ARTICLES_PER_PAGE);
        $this->template->paginator = $this->paginator;
    }

    public function renderCategory($id) {
        try {
            $this->template->articles = $this->articleFacade->findByCategory($id, $this->paginator->getPageLimit());
            $this->template->category = $this->categoryFacade->findOneById($id);
        } catch (EntityNotFoundException $ex) {
            \Tracy\Debugger::log($ex);
            $this->template->articles = false;
        }
    }

    public function actionAuthor($id) {
        $articlesCount = $this->articleFacade->getByAuthorCount($id);
        $this->paginator = new Paginator($articlesCount, self::ARTICLES_PER_PAGE);
        $this->template->paginator = $this->paginator;
    }

    public function renderAuthor($id) {
        try {
            $this->template->articles = $this->articleFacade->findByAuthor($id, $this->paginator->getPageLimit());
            $this->template->author = $this->userFacade->findOneById($id);
        } catch (EntityNotFoundException $ex) {
            \Tracy\Debugger::log($ex);
            $this->template->articles = false;
        }
    }

    public function actionTag($id) {
        $articlesCount = $this->articleFacade->getByTagCount($id);
        $this->paginator = new Paginator($articlesCount, self::ARTICLES_PER_PAGE);
        $this->template->paginator = $this->paginator;
    }

    public function renderTag($id) {
        try {
            $this->template->articles = $this->articleFacade->findByTag($id, $this->paginator->getPageLimit());
            $this->template->tag = $this->tagFacade->findOneById($id);
        } catch (EntityNotFoundException $ex) {
            \Tracy\Debugger::log($ex);
            $this->template->articles = false;
        }
    }

    public function handleMore() {
        if ($this->isAjax()) {
            $this->page += 1;
            $this->paginator->setPage($this->page);
            $this->redrawControl("wrapper");
            $this->redrawControl("results");
            $this->redrawControl("paginator");
	}
        else {
            $this->redirect("this");
        }
    }
CZechBoY
Člen | 3608
+
+1
-

A proč neuděláš více presenterů když ty akce spolu vůbec nesouvisí?