Quellcode durchsuchen

add the OtSitemapProvider middleware

Olivier Massot vor 8 Monaten
Ursprung
Commit
e6419d02c9

+ 1 - 0
ot_admin/Classes/Controller/SiteController.php

@@ -545,6 +545,7 @@ class SiteController extends ActionController
             $include .= ",EXT:frontend_editing/Configuration/TypoScript/FluidStyledContent9";
             $include .= ",EXT:ot_templating/Configuration/TypoScript";
             $include .= ",EXT:hcaptcha/Configuration/TypoScript";
+            $include .= ",EXT:seo/Configuration/TypoScript/XmlSitemap";
 
             $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_template');
             $queryBuilder->insert('sys_template')

+ 45 - 0
ot_core/Classes/Middleware/Frontend/OtSitemapProvider.php

@@ -0,0 +1,45 @@
+<?php
+declare(strict_types = 1);
+namespace Opentalent\OtCore\Middleware\Frontend;
+
+use TYPO3\CMS\Core\Http\Response;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Server\MiddlewareInterface;
+use Psr\Http\Server\RequestHandlerInterface;
+
+/**
+ * Redirect sitemap requests
+ * @see https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Seo/XmlSitemap.html
+ */
+class OtSitemapProvider implements MiddlewareInterface
+{
+    /**
+     * Resolve the site/language information by checking the page ID or the URL.
+     *
+     * @param ServerRequestInterface $request
+     * @param RequestHandlerInterface $handler
+     * @return ResponseInterface
+     */
+    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
+    {
+        $path = $request->getUri()->getPath();
+        $devMode = ($_SERVER['TYPO3_CONTEXT'] ?? '') == "Development";
+
+        $isSitemapRequest = $devMode ?
+            preg_match("/[a-z0-9-]+\/sitemap\.xml/", $path) :
+            $path === 'sitemap.xml';
+
+        if ($isSitemapRequest) {
+            $path = $devMode ? substr($request->getUri()->getPath(), 0, -strlen('/sitemap.xml')) : '';
+
+            $url = $path . '/?type=1533906435';
+            $response = new Response();
+            return $response
+                ->withStatus(301) // ou 302 pour une redirection temporaire
+                ->withHeader('Location', $url);
+        }
+
+        return $handler->handle($request);
+    }
+}

+ 12 - 1
ot_core/Configuration/RequestMiddlewares.php

@@ -1,4 +1,6 @@
 <?php
+
+use Opentalent\OtCore\Middleware\Frontend\OtSitemapProvider;
 use Opentalent\OtCore\Middleware\Frontend\OtSiteResolver;
 
 /**
@@ -6,11 +8,20 @@ use Opentalent\OtCore\Middleware\Frontend\OtSiteResolver;
  */
 return [
     'frontend' => [
-        'typo3/cms-frontend/site' => [
+        'opentalent/frontend/site' => [
             'target' => OtSiteResolver::class,
             'before' => [
                 'typo3/cms-frontend/page-resolver'
             ]
         ],
+        'opentalent/frontend/sitemap' => [
+            'target' => OtSitemapProvider::class,
+            'after' => [
+                'opentalent/frontend/site'
+            ],
+            'before' => [
+                'typo3/cms-frontend/page-resolver'
+            ]
+        ],
     ],
 ];