Skip to content
Snippets Groups Projects
Commit a4a4e0bd authored by Stefan Galinski's avatar Stefan Galinski :video_game:
Browse files

Merge branch 'feature_enableMultiFilter' into 'master'

[FEATURE] Enable filtering by all filters

See merge request !43
parents 3ca95b50 1d2bc51e
No related branches found
No related tags found
1 merge request!43[FEATURE] Enable filtering by all filters
......@@ -28,20 +28,18 @@ namespace SGalinski\SgNews\Controller;
use SGalinski\SgNews\Domain\Model\Category;
use SGalinski\SgNews\Domain\Model\News;
use SGalinski\SgNews\Domain\Model\Tag;
use SGalinski\SgNews\Domain\Repository\CategoryRepository;
use SGalinski\SgNews\Domain\Repository\NewsRepository;
use SGalinski\SgNews\Domain\Repository\TagRepository;
use SGalinski\SgNews\Service\ConfigurationService;
use SGalinski\SgNews\Service\HeaderMetaDataService;
use TYPO3\CMS\Core\Http\ImmediateResponseException;
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Persistence\Generic\Query;
use TYPO3\CMS\Extbase\Persistence\Generic\QueryResult;
use TYPO3\CMS\Extbase\Persistence\QueryInterface;
use TYPO3\CMS\Frontend\Controller\ErrorController;
use TYPO3\CMS\Frontend\Page\PageAccessFailureReasons;
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
/**
* Controller that handles the overview page of categories and their news
......@@ -108,88 +106,43 @@ class OverviewController extends AbstractController {
* @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException
*/
public function overviewAction(array $newsFilter = [], int $currentPageBrowserPage = 0) {
switch ((int) $this->settings['groupBy']) {
case 1:
$this->overviewWithCategories([], [], $newsFilter, $currentPageBrowserPage);
break;
case 2:
$this->overviewWithTags([], [], $newsFilter, $currentPageBrowserPage);
break;
default:
$this->forward('overviewWithoutCategories', NULL, NULL, $this->request->getArguments());
break;
if ((int) $this->settings['groupBy'] === 0 && (bool) $this->settings['enableFilter'] === FALSE) {
$this->forward('overviewWithoutCategories', NULL, NULL, $this->request->getArguments());
}
}
/**
* Highlights the best fitting news in the metadata of the page
*
* @param array|null $categoryIds
* @param array|null $tagIds
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
*/
protected function highlightBestFitNews(array $categoryIds = NULL, array $tagIds = NULL) {
// Setup settings
$startTime = (int) $this->settings['starttime'];
$endTime = (int) $this->settings['endtime'];
$newsLimit = (int) $this->settings['newsLimit'];
$offset = $this->calculatePaginationOffset($currentPageBrowserPage, $newsLimit);
$configurationService = GeneralUtility::makeInstance(ConfigurationService::class);
$sortBy = $configurationService->getConfiguration('sortBy', $this->settings);
$sortDirection = $configurationService->getConfiguration('sortDirection', $this->settings);
$this->tagRepository->setDefaultOrderings(['sorting' => QueryInterface::ORDER_ASCENDING]);
$this->categoryRepository->setDefaultOrderings(['sorting' => QueryInterface::ORDER_ASCENDING]);
$useAllFilters = (bool) $this->settings['enableFilter'];
$isCategoryFiltered = $useAllFilters || (int) $this->settings['groupBy'] === 1;
$isTagFiltered = $useAllFilters || (int) $this->settings['groupBy'] === 2;
/** @var News $highlightedNews */
$highlightedNews = $this->newsRepository
->findLastUpdatedOrHighlightedNewsByCategories(
1, FALSE, $categoryIds, 0, FALSE, $this->settings['sortBy'], $tagIds, $startTime, $endTime
)->getFirst();
if (!$highlightedNews) {
return;
}
/** @var Category $category */
$category = $this->categoryRepository->findByUid($highlightedNews->getPid());
$highlightedNewsMetaData = NULL;
if ($category) {
$highlightedNewsMetaData = $this->getMetaDataForNews($highlightedNews, $category);
}
if (!version_compare(ExtensionManagementUtility::getExtensionVersion('sg_seo'), '5.0.0', '>=')) {
if ($highlightedNewsMetaData['image']) {
HeaderMetaDataService::addOgImageToHeader($highlightedNewsMetaData['image']);
} elseif ($highlightedNewsMetaData['teaserImage']) {
HeaderMetaDataService::addOgImageToHeader($highlightedNewsMetaData['teaserImage']);
}
// Get tag pid
$tagPid = (int) $this->settings['tagPid'];
if (!$tagPid) {
$tagPid = $GLOBALS['TSFE']->id;
}
}
/**
* Renders the news overview grouped by categories
*
* @param array $newsByCategory
* @param array $allNews
* @param array $newsFilter
* @param int $currentPageBrowserPage
* @return void
* @throws \InvalidArgumentException
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
* @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException
* @throws ImmediateResponseException
* @throws \TYPO3\CMS\Core\Error\Http\PageNotFoundException
*/
protected function overviewWithCategories(
array $newsByCategory = [], array $allNews = [], array $newsFilter = [], int $currentPageBrowserPage = 0
) {
$newsLimitPerCategory = (int) $this->settings['newsLimit'];
$this->categoryRepository->setDefaultOrderings(['sorting' => Query::ORDER_ASCENDING]);
$offset = $this->calculatePaginationOffset($currentPageBrowserPage, $newsLimitPerCategory);
if ($this->settings['onlyNewsWithinThisPageSection']) {
$categories = $this->categoryRepository->findCategoriesInRootLine($GLOBALS['TSFE']->id);
$tags = $this->tagRepository->findTagsInRootLine($tagPid);
} else {
$tags = $this->tagRepository->findAll()->toArray();
$categories = $this->categoryRepository->findAll()->toArray();
}
if (count($categories) <= 0) {
return;
}
// Apply category restrictions
$categoryRestrictions = GeneralUtility::intExplode(',', $this->settings['categoryRestrictions'], TRUE);
if (!$isCategoryFiltered) {
$categoryRestrictions = [];
}
if (count($categoryRestrictions) > 0) {
foreach ($categories as $key => $category) {
$categoryId = $category->getUid();
......@@ -211,114 +164,106 @@ class OverviewController extends AbstractController {
}
}
if (count($categories) <= 0) {
return;
// Apply tag restrictions
$tagRestrictions = GeneralUtility::intExplode(',', $this->settings['tagRestrictions'], TRUE);
if (!$isTagFiltered) {
$tagRestrictions = [];
}
$startTime = (int) $this->settings['starttime'];
$endTime = (int) $this->settings['endtime'];
$configurationService = GeneralUtility::makeInstance(ConfigurationService::class);
$sortBy = $configurationService->getConfiguration('sortBy', $this->settings);
$sortDirection = $configurationService->getConfiguration('sortDirection', $this->settings);
$categoryIds = [];
$categoriesById = [];
$newsMetaData = [];
foreach ($categories as $category) {
/** @var Category $category */
$categoryId = $category->getUid();
$categoryIdsForSelect = [$categoryId];
$categoryIds[] = $category->getUid();
$categoriesById[$categoryId] = $category;
if ($category->_getProperty('_languageUid') > 0) {
$originalLangCategory = $this->categoryRepository->findOriginalLanguageById($category->getUid());
if ($originalLangCategory) {
$originalLangCategoryId = $originalLangCategory->getUid();
$categoryIdsForSelect[] = $originalLangCategoryId;
$categoryIds[] = $originalLangCategoryId;
$categoriesById[$originalLangCategoryId] = $originalLangCategory;
}
}
$tagIds = NULL;
if ($newsFilter['tag']) {
$tagIds = [(int) $newsFilter['tag']];
}
foreach ($categoryIdsForSelect as $categoryIdsForSelectId) {
$news = $this->newsRepository->findAllSortedNewsByCategories(
[$categoryIdsForSelectId], $newsLimitPerCategory, $offset, $sortBy, $tagIds, $startTime, $endTime,
$sortDirection
);
$newsMetaData[$categoryIdsForSelectId] = [];
foreach ($news as $newsEntry) {
/** @var News $newsEntry */
$category = $categoriesById[$categoryIdsForSelectId];
if (!$category) {
// Category isn't visible.
continue;
}
$data = $this->getMetaDataForNews($newsEntry, $category);
$newsMetaData[$categoryIdsForSelectId][] = $data;
if (count($tagRestrictions) > 0) {
foreach ($tags as $key => $tag) {
if (!in_array($tag->getUid(), $tagRestrictions, TRUE)) {
unset($tags[$key]);
}
}
}
$maxNewsPerCategory = 0;
foreach ($categoriesById as $categoryId => $category) {
if (!isset($newsMetaData[$categoryId]) || count($newsMetaData[$categoryId]) <= 0) {
// Hide empty categories.
continue;
}
/** @var Category $category */
if (isset($newsByCategory[$categoryId])) {
/** @var Category $category */
$newsByCategory[$categoryId]['newsMetaData'] =
array_merge($newsByCategory[$categoryId]['newsMetaData'], $newsMetaData[$categoryId], $newsFilter);
} else {
$newsByCategory[$categoryId] = [
'record' => $category,
'recordId' => $categoryId,
'recordType' => 'category',
'newsMetaData' => $newsMetaData[$categoryId],
'newsCount' => count($newsMetaData[$categoryId])
];
// Get category ids or use the one in the filter
$categoryIds = [];
if ($newsFilter['category']) {
$categoryIds = [(int) $newsFilter['category']];
} elseif ($isCategoryFiltered) {
foreach ($categories as $category) {
$categoryIds[] = $category->getUid();
}
$maxNewsPerCategory = \max($maxNewsPerCategory, \count($newsByCategory[$categoryId]['newsMetaData']));
} else {
$categoryIds = NULL;
}
$tagIds = NULL;
// Get tag ids or use the one in the filter
$tagIds = [];
if ($newsFilter['tag']) {
$tagIds = [(int) $newsFilter['tag']];
} elseif ($isTagFiltered) {
foreach ($tags as $tag) {
$tagIds[] = $tag->getUid();
}
} else {
$tagIds = NULL;
}
if ($newsFilter['category']) {
$categoryIds = [(int) $newsFilter['category']];
}
// Get all news by category and tag ids
$news = $this->newsRepository->findAllSortedNewsByCategories(
$categoryIds, $newsLimitPerCategory, $offset, $sortBy, $tagIds, $startTime, $endTime, $sortDirection
$categoryIds, $newsLimit, $offset, $sortBy, $tagIds, $startTime, $endTime, $sortDirection
);
// Process news result query based on filters
$allNews = [];
$newsItems = [];
$areCategoriesCreated = FALSE;
foreach ($news as $newsEntry) {
/** @var News $newsEntry */
$categoryId = $newsEntry->getPid();
$category = $categoriesById[$categoryId];
if (!$category) {
// Category isn't visible.
continue;
$newsCategory = $this->categoryRepository->findOriginalLanguageById(
$newsEntry->getPid()
) ?? $this->categoryRepository->findByUid($newsEntry->getPid());
$newsCategoryId = $newsCategory->getUid();
$newsMetaData = $this->getMetaDataForNews($newsEntry, $newsCategory);
if ((int) $this->settings['groupBy'] === 1) {
if (!$areCategoriesCreated) {
// Add all required categories
foreach ($categories as $category) {
/** @var Category $category */
$newsItems[$category->getUid()] = [
'record' => $category,
'recordId' => $category->getUid(),
'recordType' => 'category',
'newsMetaData' => [],
'newsCount' => 0
];
}
$areCategoriesCreated = TRUE;
}
$newsItems[$newsCategoryId]['newsMetaData'][] = $newsMetaData;
$newsItems[$newsCategoryId]['newsCount'] += 1;
} else {
foreach ($tags as $tag) {
$tagId = $tag->getUid();
if (!isset($newsItems[$tagId])) {
$newsItems[$tagId] = [
'record' => $tag,
'recordId' => $tagId,
'recordType' => 'tag',
'newsMetaData' => [],
'newsCount' => 0
];
}
if ($newsEntry->getTags()->contains($tag)) {
$newsItems[$tagId]['newsMetaData'][] = $newsMetaData;
$newsItems[$tagId]['newsCount'] += 1;
}
}
}
$data = $this->getMetaDataForNews($newsEntry, $category);
$allNews[] = $data;
$allNews[] = $newsMetaData;
}
$this->highlightBestFitNews($categoryIds);
$this->highlightBestFitNews($categoryIds, $tagIds);
// Check to achieve less Ajax calls.
$newsCount = $this->newsRepository->newsCountByCategories($categoryIds, $tagIds, $startTime, $endTime);
$numberOfPages = (int) ($newsLimitPerCategory <= 0 ? 0 : ceil($newsCount / $newsLimitPerCategory));
$numberOfPages = (int) ($newsLimit <= 0 ? 0 : ceil($newsCount / $newsLimit));
if ($numberOfPages !== 0 && $currentPageBrowserPage >= $numberOfPages) {
/** @var ErrorController $errorController */
$errorController = GeneralUtility::makeInstance(ErrorController::class);
......@@ -330,191 +275,94 @@ class OverviewController extends AbstractController {
throw new ImmediateResponseException($response);
}
// find all tags
$tagPid = $GLOBALS['TSFE']->id;
if ($this->settings['onlyNewsWithinThisPageSection']) {
$tags = $this->tagRepository->findTagsInRootLine($tagPid);
} else {
$tags = $this->tagRepository->findAll()->toArray();
}
// remember selection of the filter values, if any
$selectedCategory = $this->categoryRepository->findByUid((int) $newsFilter['category']);
$selectedTag = $this->tagRepository->findByUid((int) $newsFilter['tag']);
$selectedCategory = $this->categoryRepository->findByUid((int) $newsFilter['category']);
$this->view->assign('selectedCategory', $selectedCategory);
$this->view->assign('selectedTag', $selectedTag);
$this->view->assign('tags', $tags);
$this->view->assign('categories', $categories);
$this->view->assign('numberOfPages', $numberOfPages);
$this->view->assign('newsItems', $newsByCategory);
$this->view->assign('groupBy', 'category');
$this->view->assign('newsItems', $newsItems);
$this->view->assign('allNews', $allNews);
$this->view->assign('categoryTabs', TRUE);
$this->setupGridColumns();
switch ($this->settings['groupBy']) {
case 1:
$this->view->assign('groupBy', 'category');
$this->view->assign('categoryTabs', TRUE);
break;
case 2:
$this->view->assign('groupBy', 'tag');
$this->view->assign('tagTabs', TRUE);
break;
default:
$this->view->assign('groupBy', 'none');
}
}
/**
* Renders the news overview grouped by tags
* Assign the grid column classes to the frontend
*
* @param array $newsByTag
* @param array $allNews
* @param array $newsFilter
* @param int $currentPageBrowserPage
* @return void
* @throws \InvalidArgumentException
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
* @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException
* @throws ImmediateResponseException
* @throws \TYPO3\CMS\Core\Error\Http\PageNotFoundException
*/
protected function overviewWithTags(
array $newsByTag = [], array $allNews = [], array $newsFilter = [], int $currentPageBrowserPage = 0
) {
$startTime = (int) $this->settings['starttime'];
$endTime = (int) $this->settings['endtime'];
$newsLimitPerTag = (int) $this->settings['newsLimit'];
$offset = $this->calculatePaginationOffset($currentPageBrowserPage, $newsLimitPerTag);
$tagPid = (int) $this->settings['tagPid'];
if (!$tagPid) {
$tagPid = $GLOBALS['TSFE']->id;
protected function setupGridColumns(): void {
if (!isset($this->settings['gridColumns'])) {
$this->view->assign('gridColumnClasses', 'col-md-4 col-sm-6 col-xs-12');
return;
}
$configurationService = GeneralUtility::makeInstance(ConfigurationService::class);
$sortBy = $configurationService->getConfiguration('sortBy', $this->settings);
$sortDirection = $configurationService->getConfiguration('sortDirection', $this->settings);
$categoryIds = NULL;
if ($newsFilter['category']) {
$categoryIds = [(int) $newsFilter['category']];
}
$columnAmount = (int) $this->settings['gridColumns'];
$columnClasses = '';
$this->tagRepository->setDefaultOrderings(['sorting' => QueryInterface::ORDER_ASCENDING]);
if ($this->settings['onlyNewsWithinThisPageSection']) {
$tags = $this->tagRepository->findTagsInRootLine($tagPid);
} else {
$tags = $this->tagRepository->findAll()->toArray();
switch ($columnAmount) {
case 4:
$columnClasses .= 'col-lg-3 ';
case 3:
$columnClasses .= 'col-md-4 ';
case 2:
$columnClasses .= 'col-sm-6 ';
default:
$columnClasses .= 'col-xs-12';
}
$tagRestrictions = GeneralUtility::intExplode(',', $this->settings['tagRestrictions'], TRUE);
if (count($tagRestrictions) > 0) {
foreach ($tags as $key => $tag) {
if (!in_array($tag->getUid(), $tagRestrictions, TRUE)) {
unset($tags[$key]);
}
}
}
$this->view->assign('gridColumnClasses', $columnClasses);
}
// Get news by tag id
$tagIds = [];
$tagsById = [];
$categoriesById = [];
$newsMetaData = [];
foreach ($tags as $tag) {
/** @var $tag Tag */
$tagId = $tag->getUid();
$tagIds[] = $tagId;
$tagsById[$tagId] = $tag;
$news = $this->newsRepository->findAllSortedNewsByCategories(
$categoryIds, $newsLimitPerTag, $offset, $sortBy, [$tagId], $startTime, $endTime, $sortDirection
);
$newsMetaData[$tagId] = [];
foreach ($news as $newsEntry) {
/** @var News $newsEntry */
$categoryId = $newsEntry->getPid();
if (!isset($categoriesById[$categoryId])) {
$categoriesById[$categoryId] = $this->categoryRepository->findByUid($categoryId);
}
$category = $categoriesById[$categoryId];
if (!$category) {
// Category isn't visible.
continue;
}
/**
* Highlights the best fitting news in the metadata of the page
*
* @param array|null $categoryIds
* @param array|null $tagIds
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
*/
protected function highlightBestFitNews(array $categoryIds = NULL, array $tagIds = NULL) {
$startTime = (int) $this->settings['starttime'];
$endTime = (int) $this->settings['endtime'];
$newsMetaData[$tagId][] = $this->getMetaDataForNews($newsEntry, $category);
}
/** @var News $highlightedNews */
$highlightedNews = $this->newsRepository
->findLastUpdatedOrHighlightedNewsByCategories(
1, FALSE, $categoryIds, 0, FALSE, $this->settings['sortBy'], $tagIds, $startTime, $endTime
)->getFirst();
if (!$highlightedNews) {
return;
}
// Process news by tag id
$maxNewsPerTag = 0;
foreach ($tagsById as $tagId => $tag) {
if (\count($newsMetaData[$tagId]) <= 0) {
// Hide empty tags.
continue;
}
if (isset($newsByTag[$tagId])) {
$newsByTag[$tagId]['newsMetaData'] =
\array_merge($newsByTag[$tagId]['newsMetaData'], $newsMetaData[$tagId]);
} else {
$newsByTag[$tagId] = [
'record' => $tag,
'recordId' => $tagId,
'recordType' => 'tag',
'newsMetaData' => $newsMetaData[$tagId],
'newsCount' => \count($newsMetaData[$tagId])
];
}
$maxNewsPerTag = \max($maxNewsPerTag, \count($newsByTag[$tagId]['newsMetaData']));
/** @var Category $category */
$category = $this->categoryRepository->findByUid($highlightedNews->getPid());
$highlightedNewsMetaData = NULL;
if ($category) {
$highlightedNewsMetaData = $this->getMetaDataForNews($highlightedNews, $category);
}
// Get all news by tags.
if ($newsFilter['tag']) {
$tagIds = [(int) $newsFilter['tag']];
}
$news = $this->newsRepository->findAllSortedNewsByCategories(
$categoryIds, $newsLimitPerTag, $offset, $sortBy, $tagIds, $startTime, $endTime, $sortDirection
);
foreach ($news as $newsEntry) {
/** @var News $newsEntry */
$categoryId = $newsEntry->getPid();
if (!isset($categoriesById[$categoryId])) {
$categoriesById[$categoryId] = $this->categoryRepository->findByUid($categoryId);
}
/** @var Category $category */
$category = $categoriesById[$categoryId];
if (!$category) {
// Category isn't visible.
continue;
if (!version_compare(ExtensionManagementUtility::getExtensionVersion('sg_seo'), '5.0.0', '>=')) {
if ($highlightedNewsMetaData['image']) {
HeaderMetaDataService::addOgImageToHeader($highlightedNewsMetaData['image']);
} elseif ($highlightedNewsMetaData['teaserImage']) {
HeaderMetaDataService::addOgImageToHeader($highlightedNewsMetaData['teaserImage']);
}
$allNews[] = $this->getMetaDataForNews($newsEntry, $category);
}
$this->highlightBestFitNews([], $tagIds);
// Check to achieve less Ajax calls.
$newsCount = $this->newsRepository->newsCountByCategories([], $tagIds, $startTime, $endTime);
$numberOfPages = (int) ($newsLimitPerTag <= 0 ? 0 : ceil($newsCount / $newsLimitPerTag));
if ($numberOfPages !== 0 && $currentPageBrowserPage >= $numberOfPages) {
/** @var ErrorController $errorController */
$errorController = GeneralUtility::makeInstance(ErrorController::class);
$response = $errorController->pageNotFoundAction(
$GLOBALS['TYPO3_REQUEST'],
'The requested page does not exist',
['code' => PageAccessFailureReasons::PAGE_NOT_FOUND]
);
throw new ImmediateResponseException($response);
}
if ($this->settings['onlyNewsWithinThisPageSection']) {
$categories = $this->categoryRepository->findCategoriesInRootLine($GLOBALS['TSFE']->id);
} else {
$categories = $this->categoryRepository->findAll()->toArray();
}
// 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('selectedCategory', $selectedCategory);
$this->view->assign('selectedTag', $selectedTag);
$this->view->assign('tags', $tags);
$this->view->assign('categories', $categories);
$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);
}
/**
......@@ -651,6 +499,7 @@ class OverviewController extends AbstractController {
$this->view->assign('categories', $categories);
$this->view->assign('numberOfPages', $numberOfPages);
$this->view->assign('newsMetaData', $newsMetaData);
$this->setupGridColumns();
}
/**
......
......@@ -13,6 +13,7 @@
<settings.groupBy>
<TCEforms>
<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.groupBy</label>
<description>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.groupBy.description</description>
<onChange>reload</onChange>
<config>
<type>select</type>
......@@ -36,11 +37,28 @@
</TCEforms>
</settings.groupBy>
<settings.enableFilter>
<TCEforms>
<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.enableFilter</label>
<description>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.enableFilter.description</description>
<onChange>reload</onChange>
<config>
<type>check</type>
<default>0</default>
</config>
</TCEforms>
</settings.enableFilter>
<settings.categoryRestrictions>
<TCEforms>
<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.categoryRestrictions</label>
<description>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.categoryRestrictions.description</description>
<displayCond>FIELD:settings.groupBy:=:1</displayCond>
<displayCond>
<or>
<value1>FIELD:settings.groupBy:=:1</value1>
<value2>FIELD:settings.enableFilter:=:1</value2>
</or>
</displayCond>
<config>
<type>select</type>
<renderType>selectMultipleSideBySide</renderType>
......@@ -57,7 +75,12 @@
<TCEforms>
<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.tags</label>
<description>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.tags.description</description>
<displayCond>FIELD:settings.groupBy:=:2</displayCond>
<displayCond>
<or>
<value1>FIELD:settings.groupBy:=:2</value1>
<value2>FIELD:settings.enableFilter:=:1</value2>
</or>
</displayCond>
<config>
<type>select</type>
<renderType>selectTree</renderType>
......@@ -77,16 +100,6 @@
</TCEforms>
</settings.tagRestrictions>
<settings.enableFilter>
<TCEforms>
<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.enableFilter</label>
<description>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.enableFilter.description</description>
<config>
<type>check</type>
<default>0</default>
</config>
</TCEforms>
</settings.enableFilter>
<settings.categoryLabel>
<TCEforms>
<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.overview.flexForm.categoryLabel</label>
......@@ -220,6 +233,34 @@
</config>
</TCEforms>
</settings.layout>
<settings.gridColumns>
<TCEforms>
<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.gridColumns</label>
<config>
<type>select</type>
<renderType>selectSingle</renderType>
<default>3</default>
<items>
<numIndex index="0">
<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.gridColumns.1</numIndex>
<numIndex index="1">1</numIndex>
</numIndex>
<numIndex index="1">
<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.gridColumns.2</numIndex>
<numIndex index="1">2</numIndex>
</numIndex>
<numIndex index="2">
<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.gridColumns.3</numIndex>
<numIndex index="1">3</numIndex>
</numIndex>
<numIndex index="3">
<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.flexForm.gridColumns.4</numIndex>
<numIndex index="1">4</numIndex>
</numIndex>
</items>
</config>
</TCEforms>
</settings.gridColumns>
</el>
</ROOT>
</main>
......
......@@ -113,6 +113,26 @@
<source><![CDATA[News which are excluded from the list]]></source>
<target><![CDATA[News, welche nicht in der Liste dargestellt werden]]></target>
</trans-unit>
<trans-unit id="plugin.flexForm.gridColumns" approved="yes">
<source><![CDATA[Columns]]></source>
<target><![CDATA[Anzahl der Spalten]]></target>
</trans-unit>
<trans-unit id="plugin.flexForm.gridColumns.1" approved="yes">
<source><![CDATA[1 Column]]></source>
<target><![CDATA[1 Spalte]]></target>
</trans-unit>
<trans-unit id="plugin.flexForm.gridColumns.2" approved="yes">
<source><![CDATA[2 Columns]]></source>
<target><![CDATA[2 Spalten]]></target>
</trans-unit>
<trans-unit id="plugin.flexForm.gridColumns.3" approved="yes">
<source><![CDATA[3 Columns]]></source>
<target><![CDATA[3 Spalten]]></target>
</trans-unit>
<trans-unit id="plugin.flexForm.gridColumns.4" approved="yes">
<source><![CDATA[4 Columns]]></source>
<target><![CDATA[4 Spalten]]></target>
</trans-unit>
<trans-unit id="plugin.flexForm.layout" approved="yes">
<source><![CDATA[Layout]]></source>
<target><![CDATA[Layout]]></target>
......@@ -232,16 +252,20 @@ If none are selected, all categories will be available in the frontend.]]></sour
Wenn keine ausgewählt werden, sind alle Kategorien im Frontend verfügbar.]]></target>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.enableFilter" approved="yes">
<source><![CDATA[Enable filtering by all criteria.]]></source>
<target><![CDATA[Ermögliche das Filtern mit allen Krierien.]]></target>
<source><![CDATA[Show all filters]]></source>
<target><![CDATA[Zeige alle Filter an]]></target>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.enableFilter.description" approved="yes">
<source><![CDATA[Filters will be rendered as select boxes and tabs will be hidden.]]></source>
<target><![CDATA[Filter werden als Dropdown-Box angezeigt und die Tabs ausgeblendet.]]></target>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.groupBy" approved="yes">
<source><![CDATA[Group news pages in tabs by]]></source>
<target><![CDATA[News-Seiten nach folgendem Kriterium in Tabs gruppieren]]></target>
<source><![CDATA[Group news pages by]]></source>
<target><![CDATA[News-Seiten nach folgendem Kriterium gruppieren]]></target>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.groupBy.description" approved="yes">
<source><![CDATA[News pages will be grouped in tabs.]]></source>
<target><![CDATA[News-Seiten werden in Tabs gruppiert.]]></target>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.groupBy.I.0" approved="yes">
<source><![CDATA[No grouping]]></source>
......
......@@ -87,6 +87,21 @@
<trans-unit id="plugin.flexForm.excludedNews">
<source><![CDATA[News which are excluded from the list]]></source>
</trans-unit>
<trans-unit id="plugin.flexForm.gridColumns">
<source><![CDATA[Columns]]></source>
</trans-unit>
<trans-unit id="plugin.flexForm.gridColumns.1">
<source><![CDATA[1 Column]]></source>
</trans-unit>
<trans-unit id="plugin.flexForm.gridColumns.2">
<source><![CDATA[2 Columns]]></source>
</trans-unit>
<trans-unit id="plugin.flexForm.gridColumns.3">
<source><![CDATA[3 Columns]]></source>
</trans-unit>
<trans-unit id="plugin.flexForm.gridColumns.4">
<source><![CDATA[4 Columns]]></source>
</trans-unit>
<trans-unit id="plugin.flexForm.layout">
<source><![CDATA[Layout]]></source>
</trans-unit>
......@@ -176,13 +191,16 @@
If none are selected, all categories will be available in the frontend.]]></source>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.enableFilter">
<source><![CDATA[Enable filtering by all criteria.]]></source>
<source><![CDATA[Show all filters]]></source>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.enableFilter.description">
<source><![CDATA[Filters will be rendered as select boxes and tabs will be hidden.]]></source>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.groupBy">
<source><![CDATA[Group news pages in tabs by]]></source>
<source><![CDATA[Group news pages by]]></source>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.groupBy.description">
<source><![CDATA[News pages will be grouped in tabs.]]></source>
</trans-unit>
<trans-unit id="plugin.overview.flexForm.groupBy.I.0">
<source><![CDATA[No grouping]]></source>
......
......@@ -58,7 +58,7 @@
<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:if condition="{newsMetaDataEntry.news}">
<li class="col-md-4 col-sm-6 col-xs-12">
<li class="{gridColumnClasses}">
<f:render partial="Teaser" arguments="{
newsMetaData: newsMetaDataEntry,
headerTag: '<h2>',
......@@ -92,7 +92,7 @@
<f:section name="content">
<ul class="tx-sgnews-list tx-sgnews-list-0 row" data-record="0">
<f:for each="{allNews}" as="newsMetaDataEntry">
<li class="col-md-4 col-sm-6 col-xs-12">
<li class="{gridColumnClasses}">
<f:render partial="Teaser" arguments="{
newsMetaData: newsMetaDataEntry,
headerTag: '<h2>',
......
......@@ -18,7 +18,7 @@
<f:then>
<ul class="tx-sgnews-list tx-sgnews-list-0 row" data-record="0">
<f:for each="{newsMetaData}" as="newsMetaDataEntry">
<li class="col-md-4 col-sm-6 col-xs-12">
<li class="{gridColumnClasses}">
<f:render partial="Teaser" arguments="{
newsMetaData: newsMetaDataEntry,
headerTag: '<h2>',
......
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