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

[TASK] Finishing sorted by category view

parent c51279f1
No related branches found
No related tags found
1 merge request!5Feature 5 2 0
...@@ -68,7 +68,7 @@ class OverviewController extends AbstractController { ...@@ -68,7 +68,7 @@ class OverviewController extends AbstractController {
public function overviewAction(array $newsFilter = []) { public function overviewAction(array $newsFilter = []) {
switch ((int) $this->settings['groupBy']) { switch ((int) $this->settings['groupBy']) {
case 1: case 1:
$this->overviewWithCategories(); $this->overviewWithCategories([], [], $newsFilter);
break; break;
case 2: case 2:
$this->overviewWithTags(); $this->overviewWithTags();
...@@ -119,11 +119,12 @@ class OverviewController extends AbstractController { ...@@ -119,11 +119,12 @@ class OverviewController extends AbstractController {
* *
* @param array $newsByCategory * @param array $newsByCategory
* @param array $allNews * @param array $allNews
* @param array $newsFilter
* @return void * @return void
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
*/ */
protected function overviewWithCategories(array $newsByCategory = [], array $allNews = []) { protected function overviewWithCategories(array $newsByCategory = [], array $allNews = [], array $newsFilter = []) {
$newsLimitPerCategory = (int) $this->settings['newsLimit']; $newsLimitPerCategory = (int) $this->settings['newsLimit'];
$this->categoryRepository->setDefaultOrderings(['sorting' => Query::ORDER_ASCENDING]); $this->categoryRepository->setDefaultOrderings(['sorting' => Query::ORDER_ASCENDING]);
...@@ -152,8 +153,12 @@ class OverviewController extends AbstractController { ...@@ -152,8 +153,12 @@ class OverviewController extends AbstractController {
$categoryIds[] = $category->getUid(); $categoryIds[] = $category->getUid();
$categoriesById[$categoryId] = $category; $categoriesById[$categoryId] = $category;
$tagIds = NULL;
if ($newsFilter['tag']) {
$tagIds = [(int) $newsFilter['tag']];
}
$news = $this->newsRepository->findAllSortedNewsByCategories( $news = $this->newsRepository->findAllSortedNewsByCategories(
[$categoryId], $newsLimitPerCategory, $offset, $this->settings['sortBy'], NULL, $startTime, $endTime [$categoryId], $newsLimitPerCategory, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime
); );
$newsMetaData[$categoryId] = []; $newsMetaData[$categoryId] = [];
foreach ($news as $newsEntry) { foreach ($news as $newsEntry) {
...@@ -176,21 +181,26 @@ class OverviewController extends AbstractController { ...@@ -176,21 +181,26 @@ class OverviewController extends AbstractController {
if (isset($newsByCategory[$categoryId])) { if (isset($newsByCategory[$categoryId])) {
/** @var $category Category */ /** @var $category Category */
$newsByCategory[$categoryId]['newsMetaData'] = $newsByCategory[$categoryId]['newsMetaData'] =
array_merge($newsByCategory[$categoryId]['newsMetaData'], $newsMetaData[$categoryId]); array_merge($newsByCategory[$categoryId]['newsMetaData'], $newsMetaData[$categoryId], $newsFilter);
} else { } else {
$newsByCategory[$categoryId] = [ $newsByCategory[$categoryId] = [
'record' => $category, 'record' => $category,
'recordId' => $categoryId, 'recordId' => $categoryId,
'recordType' => 'category', 'recordType' => 'category',
'newsMetaData' => $newsMetaData[$categoryId] 'newsMetaData' => $newsMetaData[$categoryId],
'newsCount' => \count($newsMetaData[$categoryId])
]; ];
} }
$maxNewsPerCategory = max($maxNewsPerCategory, count($newsByCategory[$categoryId]['newsMetaData'])); $maxNewsPerCategory = max($maxNewsPerCategory, count($newsByCategory[$categoryId]['newsMetaData']));
} }
$tagIds = NULL;
if ($newsFilter['tag']) {
$tagIds = [(int) $newsFilter['tag']];
}
$news = $this->newsRepository->findAllSortedNewsByCategories( $news = $this->newsRepository->findAllSortedNewsByCategories(
$categoryIds, $newsLimitPerCategory, $offset, $this->settings['sortBy'], NULL, $startTime, $endTime $categoryIds, $newsLimitPerCategory, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime
); );
foreach ($news as $newsEntry) { foreach ($news as $newsEntry) {
...@@ -208,14 +218,14 @@ class OverviewController extends AbstractController { ...@@ -208,14 +218,14 @@ class OverviewController extends AbstractController {
$this->highlightBestFitNews($categoryIds); $this->highlightBestFitNews($categoryIds);
$newsCount = $this->newsRepository->newsCountByCategories($categoryIds, NULL, $startTime, $endTime); $newsCount = $this->newsRepository->newsCountByCategories($categoryIds, $tagIds, $startTime, $endTime);
$numberOfPages = ($newsLimitPerCategory <= 0 ? 0 : ceil($newsCount / $newsLimitPerCategory)); $numberOfPages = ($newsLimitPerCategory <= 0 ? 0 : ceil($newsCount / $newsLimitPerCategory));
// Redo this function, until one variable get the amount of newsLimitPerTag. Reduces the amount of ajax calls. Needed because of languagevisibility. // Redo this function, until one variable get the amount of newsLimitPerTag. Reduces the amount of ajax calls. Needed because of languagevisibility.
if ($maxNewsPerCategory < $newsLimitPerCategory && count($allNews) < $newsLimitPerCategory) { if ($maxNewsPerCategory < $newsLimitPerCategory && count($allNews) < $newsLimitPerCategory) {
$nextPage = $currentPageBrowserPage + 1; $nextPage = $currentPageBrowserPage + 1;
if ($nextPage <= $numberOfPages) { if ($nextPage <= $numberOfPages) {
GeneralUtility::_GETset(['tx_sgnews_pagebrowser' => ['currentPage' => $nextPage]]); GeneralUtility::_GETset(['tx_sgnews_pagebrowser' => ['currentPage' => $nextPage]]);
$this->overviewWithCategories($newsByCategory, $allNews); $this->overviewWithCategories($newsByCategory, $allNews, $newsFilter);
return; return;
} }
} }
...@@ -229,12 +239,16 @@ class OverviewController extends AbstractController { ...@@ -229,12 +239,16 @@ class OverviewController extends AbstractController {
$tags = $this->tagRepository->findAll(); $tags = $this->tagRepository->findAll();
} }
// remember selection of the filter values, if any
$selectedTag = $this->tagRepository->findByUid((int) $newsFilter['tag']);
$this->view->assign('selectedTag', $selectedTag);
$this->view->assign('tags', $tags->toArray()); $this->view->assign('tags', $tags->toArray());
$this->view->assign('categories', $categories->toArray()); $this->view->assign('categories', $categories->toArray());
$this->view->assign('numberOfPages', $numberOfPages); $this->view->assign('numberOfPages', $numberOfPages);
$this->view->assign('newsItems', $newsByCategory); $this->view->assign('newsItems', $newsByCategory);
$this->view->assign('groupBy', 'category'); $this->view->assign('groupBy', 'category');
$this->view->assign('allNews', $allNews); $this->view->assign('allNews', $allNews);
$this->view->assign('categoryTabs', TRUE);
} }
/** /**
...@@ -363,6 +377,7 @@ class OverviewController extends AbstractController { ...@@ -363,6 +377,7 @@ class OverviewController extends AbstractController {
$categories = $this->categoryRepository->findAll(); $categories = $this->categoryRepository->findAll();
} }
$this->view->assign('selectedTag', $selectedTag);
$this->view->assign('tags', $tags->toArray()); $this->view->assign('tags', $tags->toArray());
$this->view->assign('categories', $categories->toArray()); $this->view->assign('categories', $categories->toArray());
$this->view->assign('numberOfPages', $numberOfPages); $this->view->assign('numberOfPages', $numberOfPages);
...@@ -382,7 +397,9 @@ class OverviewController extends AbstractController { ...@@ -382,7 +397,9 @@ class OverviewController extends AbstractController {
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException * @throws \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException
*/ */
protected function overviewWithoutCategoriesAction(array $newsMetaData = [], array $newsFilter = NULL, $isInitialCall = TRUE) { protected function overviewWithoutCategoriesAction(
array $newsMetaData = [], array $newsFilter = NULL, $isInitialCall = TRUE
) {
// remember selection of the filter values, if any // remember selection of the filter values, if any
$selectedTag = $this->tagRepository->findByUid((int) $newsFilter['tag']); $selectedTag = $this->tagRepository->findByUid((int) $newsFilter['tag']);
$selectedCategory = $this->categoryRepository->findByUid((int) $newsFilter['category']); $selectedCategory = $this->categoryRepository->findByUid((int) $newsFilter['category']);
......
<f:form id="tx-sgnews-filter" method="get" objectName="newsFilter"> <f:form id="tx-sgnews-filter" method="get" objectName="newsFilter">
<div class="tx-sgnews-filter-bar"> <div class="tx-sgnews-filter-bar">
<div class="tx-sgnews-filter-bar-form-control"> <f:if condition="!{categoryTabs}">
<label for="filter-categories"> <div class="tx-sgnews-filter-bar-form-control">
<f:translate key="frontend.filter.category" /> <label for="filter-categories">
</label> <f:translate key="frontend.filter.category" />
<f:form.select class="tx-sgnews-select form-control" multiple="0" size="1" value="{selectedCategory.uid}" </label>
property="category" optionLabelField="title" optionValueField="uid" options="{categories}" <f:form.select class="tx-sgnews-select form-control" multiple="0" size="1" value="{selectedCategory.uid}"
id="filter-categories" prependOptionLabel="" prependOptionValue="" /> property="category" optionLabelField="title" optionValueField="uid" options="{categories}"
</div> id="filter-categories" prependOptionLabel="" prependOptionValue="" />
</div>
</f:if>
<div class="tx-sgnews-filter-bar-form-control"> <div class="tx-sgnews-filter-bar-form-control">
<label for="filter-tags"> <label for="filter-tags">
<f:translate key="frontend.filter.tag" /> <f:translate key="frontend.filter.tag" />
......
...@@ -3,12 +3,11 @@ ...@@ -3,12 +3,11 @@
{namespace sg=SGalinski\SgNews\ViewHelpers} {namespace sg=SGalinski\SgNews\ViewHelpers}
<f:section name="main"> <f:section name="main">
<div id="sgnews-newslist"> <div id="tx-sgnews-newslist">
<f:render partial="Filter" arguments="{controller: 'OverviewController', action: 'overview', categories: categories, <f:render partial="Filter" arguments="{categoryTabs: categoryTabs, categories: categories,
tags: tags, selectedTag: selectedTag, selectedCategory: selectedCategory}" /> tags: tags, selectedTag: selectedTag, selectedCategory: selectedCategory}" />
</div> </div>
<br /> <br />
<div class="tx-sgnews-categories"> <div class="tx-sgnews-categories">
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
<li class="tx-sgnews-category active"> <li class="tx-sgnews-category active">
...@@ -42,7 +41,7 @@ ...@@ -42,7 +41,7 @@
newsMetaData: newsMetaDataEntry, newsMetaData: newsMetaDataEntry,
headerTag: '<h2>', headerTag: '<h2>',
closingHeaderTag: '</h2>', closingHeaderTag: '</h2>',
showCategory: '{f:if(condition: \'{groupBy} == \"category\"\', then: 0, else: 1)}' showCategory: '{f:if(condition: \'{groupBy} == \" category\"\', then: 0, else: 1)}'
}" /> }" />
</li> </li>
</f:for> </f:for>
...@@ -50,17 +49,24 @@ ...@@ -50,17 +49,24 @@
</div> </div>
<f:for each="{newsItems}" as="dataItems"> <f:for each="{newsItems}" as="dataItems">
<div class="tab-pane" id="sgnewsTab{dataItems.record.uid}"> <div class="tab-pane" id="sgnewsTab{dataItems.record.uid}">
<f:if condition="{dataItems.newsCount} == 0">
<p>
<f:translate key="frontend.filter.no_result" />
</p>
</f:if>
<h4 class="tx-sgnews-tab-title">{dataItems.record.title}</h4> <h4 class="tx-sgnews-tab-title">{dataItems.record.title}</h4>
<ul class="tx-sgnews-list tx-sgnews-list-{dataItems.record.uid} row" data-record="{dataItems.record.uid}"> <ul class="tx-sgnews-list tx-sgnews-list-{dataItems.record.uid} row" data-record="{dataItems.record.uid}">
<f:for each="{dataItems.newsMetaData}" as="newsMetaDataEntry"> <f:for each="{dataItems.newsMetaData}" as="newsMetaDataEntry">
<li class="col-md-4 col-sm-6 col-xs-12"> <f:if condition="{newsMetaDataEntry.news}">
<f:render partial="Teaser" arguments="{ <li class="col-md-4 col-sm-6 col-xs-12">
newsMetaData: newsMetaDataEntry, <f:render partial="Teaser" arguments="{
headerTag: '<h2>', newsMetaData: newsMetaDataEntry,
closingHeaderTag: '</h2>', headerTag: '<h2>',
showCategory: '{f:if(condition: \'{groupBy} == \"category\"\', then: 0, else: 1)}' closingHeaderTag: '</h2>',
}" /> showCategory: '{f:if(condition: \'{groupBy} == \" category\"\', then: 0, else: 1)}'
</li> }" />
</li>
</f:if>
</f:for> </f:for>
</ul> </ul>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<f:section name="main"> <f:section name="main">
<div id="tx-sgnews-newslist"> <div id="tx-sgnews-newslist">
<f:render partial="Filter" arguments="{controller: 'OverviewController', action: 'overview', categories: categories, <f:render partial="Filter" arguments="{categories: categories,
tags: tags, selectedTag: selectedTag, selectedCategory: selectedCategory}" /> tags: tags, selectedTag: selectedTag, selectedCategory: selectedCategory}" />
</div> </div>
<div class="tx-sgnews-overview"> <div class="tx-sgnews-overview">
......
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