Skip to content
Snippets Groups Projects
Commit 9ec1e0ca authored by Torsten Oppermann's avatar Torsten Oppermann
Browse files

[TASk] Filtering by category/tag in overview without categories

parent a8b23644
No related branches found
No related tags found
1 merge request!5Feature 5 2 0
......@@ -56,15 +56,23 @@ class OverviewController extends AbstractController {
*/
protected $newsRepository;
/**
* @var array $newsFilter
*/
private $newsFilter = [];
/**
* Renders the news overview
*
* @param array $newsFilter
* @return void
* @throws \InvalidArgumentException
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
*/
public function overviewAction() {
public function overviewAction(array $newsFilter = []) {
$this->newsFilter = $newsFilter;
switch ((int) $this->settings['groupBy']) {
case 1:
$this->overviewWithCategories();
......@@ -73,7 +81,7 @@ class OverviewController extends AbstractController {
$this->overviewWithTags();
break;
default:
$this->forward('overviewWithoutCategories');
$this->forward('overviewWithoutCategories', NULL, NULL, $this->request->getArguments());
break;
}
}
......@@ -374,11 +382,22 @@ class OverviewController extends AbstractController {
* Renders the news in a paginated list
*
* @param array $newsMetaData
* @param array $newsFilter
* @return void
* @throws \InvalidArgumentException
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
*/
protected function overviewWithoutCategoriesAction(array $newsMetaData = []) {
protected function overviewWithoutCategoriesAction(array $newsMetaData = [], array $newsFilter = []) {
if (empty($newsFilter)) {
$newsFilter = $this->request->getArguments()['newsFilter'];
}
// remember selection of the filter values, if any
$selectedTag = $this->tagRepository->findByUid((int) $newsFilter['tag']);
$selectedCategory = $this->categoryRepository->findByUid((int) $newsFilter['category']);
$this->view->assign('selectedTag', $selectedTag);
$this->view->assign('selectedCategory', $selectedCategory);
$offset = 0;
$newsPerPage = (int) $this->settings['newsLimit'];
$currentPageBrowserPage = (int) GeneralUtility::_GP('tx_sgnews_pagebrowser')['currentPage'];
......@@ -416,8 +435,17 @@ class OverviewController extends AbstractController {
}
}
// filter by category and tag if selected in the filter
if ($newsFilter['category']) {
$categoryIds = [(int) $newsFilter['category']];
}
$tagIds = NULL;
if ($newsFilter['tag']) {
$tagIds = [(int) $newsFilter['tag']];
}
$news = $this->newsRepository->findAllSortedNewsByCategories(
$categoryIds, $newsPerPage, $offset, $this->settings['sortBy'], NULL, $startTime, $endTime
$categoryIds, $newsPerPage, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime
);
foreach ($news as $newsEntry) {
/** @var News $newsEntry */
......@@ -433,7 +461,7 @@ class OverviewController extends AbstractController {
$nextPage = $currentPageBrowserPage + 1;
if ($nextPage <= $numberOfPages) {
GeneralUtility::_GETset(['tx_sgnews_pagebrowser' => ['currentPage' => $nextPage]]);
$this->overviewWithoutCategoriesAction($newsMetaData);
$this->overviewWithoutCategoriesAction($newsMetaData, $this->request->getArguments()['newsFilter']);
return;
}
}
......
......@@ -4,7 +4,7 @@
<f:section name="main">
<div id="sgnews-newslist">
<f:render partial="Filter" arguments="{controller: 'OverviewController', action: 'index', categories: categories,
<f:render partial="Filter" arguments="{controller: 'OverviewController', action: 'overview', categories: categories,
tags: tags, selectedTag: selectedTag, selectedCategory: selectedCategory}" />
</div>
<br />
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment