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

[TASK] Finishing logic

parent 135a8659
No related branches found
No related tags found
1 merge request!5Feature 5 2 0
......@@ -71,7 +71,7 @@ class OverviewController extends AbstractController {
$this->overviewWithCategories([], [], $newsFilter);
break;
case 2:
$this->overviewWithTags();
$this->overviewWithTags([], [], $newsFilter);
break;
default:
$this->forward('overviewWithoutCategories', NULL, NULL, $this->request->getArguments());
......@@ -177,6 +177,11 @@ class OverviewController extends AbstractController {
$maxNewsPerCategory = 0;
foreach ($categoriesById as $categoryId => $category) {
if (\count($newsMetaData[$categoryId]) <= 0) {
// Hide empty tags.
continue;
}
/** @var $category Category */
if (isset($newsByCategory[$categoryId])) {
/** @var $category Category */
......@@ -256,11 +261,12 @@ class OverviewController extends AbstractController {
*
* @param array $newsByTag
* @param array $allNews
* @param array $newsFilter
* @return void
* @throws \InvalidArgumentException
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
*/
protected function overviewWithTags(array $newsByTag = [], array $allNews = []) {
protected function overviewWithTags(array $newsByTag = [], array $allNews = [], array $newsFilter = []) {
$newsLimitPerTag = (int) $this->settings['newsLimit'];
$this->tagRepository->setDefaultOrderings(['sorting' => Query::ORDER_ASCENDING]);
......@@ -288,14 +294,19 @@ class OverviewController extends AbstractController {
$tagsById = [];
$categoriesById = [];
$newsMetaData = [];
foreach ($tags as $tag) {
/** @var $tag Tag */
$tagId = $tag->getUid();
$tagIds[] = $tagId;
$tagsById[$tagId] = $tag;
$categoryIds = NULL;
if ($newsFilter['category']) {
$categoryIds = [(int) $newsFilter['category']];
}
$news = $this->newsRepository->findAllSortedNewsByCategories(
NULL, $newsLimitPerTag, $offset, $this->settings['sortBy'], [$tagId], $startTime, $endTime
$categoryIds, $newsLimitPerTag, $offset, $this->settings['sortBy'], [$tagId], $startTime, $endTime
);
$newsMetaData[$tagId] = [];
foreach ($news as $newsEntry) {
......@@ -317,7 +328,7 @@ class OverviewController extends AbstractController {
$maxNewsPerTag = 0;
foreach ($tagsById as $tagId => $tag) {
if (count($newsMetaData[$tagId]) <= 0) {
if (\count($newsMetaData[$tagId]) <= 0) {
// Hide empty tags.
continue;
}
......@@ -330,15 +341,20 @@ class OverviewController extends AbstractController {
'record' => $tag,
'recordId' => $tagId,
'recordType' => 'tag',
'newsMetaData' => $newsMetaData[$tagId]
'newsMetaData' => $newsMetaData[$tagId],
'newsCount' => \count($newsMetaData[$tagId])
];
}
$maxNewsPerTag = max($maxNewsPerTag, count($newsByTag[$tagId]['newsMetaData']));
}
$categoryIds = NULL;
if ($newsFilter['category']) {
$categoryIds = [(int) $newsFilter['category']];
}
$news = $this->newsRepository->findAllSortedNewsByCategories(
NULL, $newsLimitPerTag, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime
$categoryIds, $newsLimitPerTag, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime
);
foreach ($news as $newsEntry) {
/** @var News $newsEntry */
......@@ -365,7 +381,7 @@ class OverviewController extends AbstractController {
$nextPage = $currentPageBrowserPage + 1;
if ($nextPage <= $numberOfPages) {
GeneralUtility::_GETset(['tx_sgnews_pagebrowser' => ['currentPage' => $nextPage]]);
$this->overviewWithTags($newsByTag, $allNews);
$this->overviewWithTags($newsByTag, $allNews, $newsFilter);
return;
}
}
......@@ -377,13 +393,16 @@ class OverviewController extends AbstractController {
$categories = $this->categoryRepository->findAll();
}
$this->view->assign('selectedTag', $selectedTag);
// remember selection of the filter values, if any
$selectedCategory = $this->categoryRepository->findByUid((int) $newsFilter['category']);
$this->view->assign('selectedCategory', $selectedCategory);
$this->view->assign('tags', $tags->toArray());
$this->view->assign('categories', $categories->toArray());
$this->view->assign('numberOfPages', $numberOfPages);
$this->view->assign('newsItems', $newsByTag);
$this->view->assign('groupBy', 'tag');
$this->view->assign('allNews', $allNews);
$this->view->assign('tagTabs', TRUE);
}
/**
......
......@@ -10,13 +10,15 @@
id="filter-categories" prependOptionLabel="" prependOptionValue="" />
</div>
</f:if>
<div class="tx-sgnews-filter-bar-form-control">
<label for="filter-tags">
<f:translate key="frontend.filter.tag" />
</label>
<f:form.select class="tx-sgnews-select form-control" multiple="0" size="1" value="{selectedTag.uid}"
property="tag" optionValueField="uid" options="{tags}" id="filter-tags"
optionLabelField="title" prependOptionLabel="" prependOptionValue="" />
</div>
<f:if condition="!{tagTabs}">
<div class="tx-sgnews-filter-bar-form-control">
<label for="filter-tags">
<f:translate key="frontend.filter.tag" />
</label>
<f:form.select class="tx-sgnews-select form-control" multiple="0" size="1" value="{selectedTag.uid}"
property="tag" optionValueField="uid" options="{tags}" id="filter-tags"
optionLabelField="title" prependOptionLabel="" prependOptionValue="" />
</div>
</f:if>
</div>
</f:form>
......@@ -4,7 +4,7 @@
<f:section name="main">
<div id="tx-sgnews-newslist">
<f:render partial="Filter" arguments="{categoryTabs: categoryTabs, categories: categories,
<f:render partial="Filter" arguments="{tagTabs: tagTabs, categoryTabs: categoryTabs, 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