setTitle(_t('@users', 'Account') . ' / ' . _t('listings', 'Favorite Listings')); $this->setContentTitle(_t('listings', 'Favorite Listings')); $this->setKey('account.listings.favorite'); $this->setTemplate('account/favorites.page', 'listings'); $this->useBreadcrumbs(); } public function handle() { $this->userId = $this->request->userId(); } public function data() { $data = parent::data(); $data['guest'] = ! $this->userId; if ($data['guest']) { $this->breadcrumbs->add(_t('listings', 'Favorite Listings')); } return $data; } public function blocks() { $this->addBlock('list', ProfileItemsListBlock::class, function (ProfileItemsListBlock $block) { # filter $favorites = Listings::favorites(); $favoritesList = $favorites->getList($this->userId); $favorites->actualize($favoritesList, $this->userId); $block->filter = [ 'id' => $favoritesList, 'is_publicated' => 1, 'status' => Listings::STATUS_PUBLICATED, ]; $block->skipFilter('query', true); # template: prerender list block only $block->prerenderable(true); $block->setTemplate(function ($data) use ($block) { # pass data to page template foreach (['cats', 'categoryId', 'total', 'page', 'pages'] as $key) { $this->data[$key] = $data[$key]; } return $block->getBlock('list')->render(); }); }); } public function onCleanupAction() { do { if ($this->userId && ! $this->isRequestValid()) { $this->errors->reloadPage(); break; } Listings::favorites()->deleteAll($this->userId); } while (false); return $this->getActionResponse(); } }