Ich habe das Event SiteConfigurationLoadedEvent
nun mal praktisch anhand der News Extension erprobt und es funktioniert einwandfrei mit folgendem Setup:
1) In der Datei EXT:news/Configuration/Services.yaml
folgenden Zusatzeintrag ergänzen:
GeorgRinger\News\Event\Listener\SiteConfigurationLoadedEventListener:
tags:
- name: event.listener
identifier: 'ext-news/site-configuration-loaded'
method: 'modify'
event: TYPO3\CMS\Core\Configuration\Event\SiteConfigurationLoadedEvent
2) Die Datei EXT:news/Classes/Event/Listener/SiteConfigurationLoadedEventListener.php
anlegen mit folgendem Inhalt
<?php
declare(strict_types=1);
/*
* This file is part of the "news" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*/
namespace GeorgRinger\News\Event\Listener;
use TYPO3\CMS\Core\Configuration\Event\SiteConfigurationLoadedEvent;
use TYPO3\CMS\Core\Configuration\Loader\YamlFileLoader;
use TYPO3\CMS\Core\Utility\ArrayUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* Event to modify the site configuration array before loading the configuration
*/
final class SiteConfigurationLoadedEventListener
{
public function modify(SiteConfigurationLoadedEvent $event): void
{
$configuration = $event->getConfiguration();
$fileLoader = GeneralUtility::makeInstance(YamlFileLoader::class);
$routeEnhancersConfiguration = $fileLoader->load('EXT:news/Configuration/Yaml/routeEnhancers.yaml');
ArrayUtility::mergeRecursiveWithOverrule($configuration, $routeEnhancersConfiguration);
$event->setConfiguration($configuration);
}
}
3) Die Datei EXT:news/Configuration/Yaml/routeEnhancers.yaml
anlegen mit der gewünschten routeEnhancers
-Konfiguration
routeEnhancers:
News:
type: Extbase
extension: News
plugin: Pi1
routes:
- routePath: '/'
_controller: 'News::list'
- routePath: '/page-{page}'
_controller: 'News::list'
_arguments:
page: 'currentPage'
- routePath: '/{news-title}'
_controller: 'News::detail'
_arguments:
news-title: news
- routePath: '/{category-name}'
_controller: 'News::list'
_arguments:
category-name: overwriteDemand/categories
- routePath: '/{tag-name}'
_controller: 'News::list'
_arguments:
tag-name: overwriteDemand/tags
defaultController: 'News::list'
defaults:
page: '0'
aspects:
news-title:
type: NewsTitle
page:
type: StaticRangeMapper
start: '1'
end: '100'
category-name:
type: NewsCategory
tag-name:
type: NewsTag
PageTypeSuffix:
type: PageType
map:
'feed.xml': 9818
'calendar.ical': 9819
Anschließend werden die Pfade der News ohne manuelle eingriffe automatisch korrekt gebildet 💪👍
Sehr cool, dass das nun so einfach möglich ist. Da muss ich gleich mal überlegen, wo ich das sinnvoll bei meinen Extensions verbauen kann ☺️