diff --git a/Classes/Controller/ListByCategoryController.php b/Classes/Controller/ListByCategoryController.php index 2a1c9619255b8ee6dee8a1e990475adf98afad87..d4547f514ed26d96f9b0e05c707065975d3db6b4 100644 --- a/Classes/Controller/ListByCategoryController.php +++ b/Classes/Controller/ListByCategoryController.php @@ -120,6 +120,9 @@ class ListByCategoryController extends AbstractController { $filterByCategories = FALSE; $categoryUids = GeneralUtility::intExplode(',', $this->settings['categories']); $tagUids = GeneralUtility::intExplode(',', $this->settings['tags'], TRUE); + + HeaderMetaDataService::addPageNumberToCanonical($currentPageBrowserPage); + foreach ($categoryUids as $categoryUid) { if ($categoryUid > 0) { $filterByCategories = TRUE; diff --git a/Classes/Controller/OverviewController.php b/Classes/Controller/OverviewController.php index 5b002811c71f32d22e80395f42762c173c3515bd..93a0d0b702c6e8799ae3b336a15f0bf349cc9eda 100644 --- a/Classes/Controller/OverviewController.php +++ b/Classes/Controller/OverviewController.php @@ -34,6 +34,7 @@ use SGalinski\SgNews\Domain\Repository\TagRepository; use SGalinski\SgNews\Domain\Service\NewsService; use SGalinski\SgNews\Service\ConfigurationService; use SGalinski\SgNews\Service\HeaderMetaDataService; +use SGalinski\SgSeo\Service\HeadTagService; use TYPO3\CMS\Core\Http\ImmediateResponseException; use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -137,6 +138,8 @@ class OverviewController extends AbstractController { $isCategoryFiltered = $useAllFilters || (int) $this->settings['groupBy'] === 1; $isTagFiltered = $useAllFilters || (int) $this->settings['groupBy'] === 2; + HeaderMetaDataService::addPageNumberToCanonical($currentPageBrowserPage); + // Get tag pid $tagPid = (int) $this->settings['tagPid']; if (!$tagPid) { @@ -418,6 +421,8 @@ class OverviewController extends AbstractController { $newsPerPage = (int) $this->settings['newsLimit']; $offset = $this->calculatePaginationOffset($currentPageBrowserPage, $newsPerPage); + HeaderMetaDataService::addPageNumberToCanonical($currentPageBrowserPage); + $newsCount = 0; $categoryIds = NULL; $categoriesById = []; diff --git a/Classes/Service/HeaderMetaDataService.php b/Classes/Service/HeaderMetaDataService.php index 807a64f57207d5cfde84145731bd6692c26d01e5..aa686892aa0dd5eda059acb9dfb9e2429c1aba5a 100644 --- a/Classes/Service/HeaderMetaDataService.php +++ b/Classes/Service/HeaderMetaDataService.php @@ -26,7 +26,11 @@ namespace SGalinski\SgNews\Service; * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ +use SGalinski\SgSeo\Service\HeadTagService; +use TYPO3\CMS\Core\Package\Exception; use TYPO3\CMS\Core\Resource\FileReference; +use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; +use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; /** @@ -44,4 +48,31 @@ class HeaderMetaDataService { $typoScriptController = $GLOBALS['TSFE']; $typoScriptController->page['og_image_path_by_extension'] = $path; } + + /** + * Adds the page number to the canonical + * + * @param int $currentPage + * @return void + * @throws Exception + */ + public static function addPageNumberToCanonical(int $currentPage): void { + if ($currentPage < 1) { + return; + } + + if (version_compare(ExtensionManagementUtility::getExtensionVersion('sg_seo'), '5.0.0', '>=')) { + $headTagService = GeneralUtility::makeInstance( + HeadTagService::class, + FALSE, + '', + '', + '&tx_sgnews_pagebrowser[currentPage]=' . $currentPage + ); + $headTagService->execute(); + } else { + $GLOBALS['TSFE']->page['extensionArgumentsForCanonicalAndHrefLang'] = + '&tx_sgnews_pagebrowser[currentPage]=' . $currentPage; + } + } } diff --git a/Configuration/Routes/config.yaml b/Configuration/Routes/config.yaml index 63f43e4a9b2c56279a5b009f1e89375e7e3e747e..05af95b4700be97a346a39868557812c1d5426b8 100644 --- a/Configuration/Routes/config.yaml +++ b/Configuration/Routes/config.yaml @@ -3,7 +3,13 @@ routeEnhancers: type: Plugin namespace: tx_sgnews_pagebrowser routePath: '/{localizedSegment}/{currentPage}' + defaults: + currentPage: '0' aspects: + currentPage: + type: StaticRangeMapper + start: '1' + end: '1000' localizedSegment: type: LocaleModifier default: page diff --git a/README.md b/README.md index d4a25ba0780ea166aee0998e5b5a0b7b9c731da0..09323fcaa0349055ac13b4b94239da470a30c5ef 100644 --- a/README.md +++ b/README.md @@ -307,6 +307,30 @@ pagebrowser.settings { } ``` +Example route enhancers with a static range for the page number to be able to generate URLs without additional cHash parameter + +```YAML +routeEnhancers: + PageBrowserNews: + type: Plugin + namespace: tx_sgnews_pagebrowser + routePath: '/{localizedSegment}/{currentPage}' + defaults: + currentPage: '0' + aspects: + currentPage: + type: StaticRangeMapper + start: '1' + end: '1000' + localizedSegment: + type: LocaleModifier + default: page + localeMap: + - + locale: 'de_DE.*' + value: page +``` + --- ###### addLike