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
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");
}
}