TYPO3 routeEnhancers с суффиксом '.html' на корневой странице - PullRequest
0 голосов
/ 26 сентября 2019

По-прежнему нет возможности использовать baseurl, например, «www.mysite.com», если routeEnhancers настроены с суффиксом «.html»?

По моему мнению, это должно быть основной функцией, но я могу »не могу найти никакого решения.Перенаправление ссылки на домашнюю страницу не вариант, так как канонические ссылки по-прежнему указывают на неправильный URL-адрес (www.mysite.com/index.html)

Есть ли какое-либо решение?

Моя конфигурация выглядит такэто:

routeEnhancers:
  PageTypeSuffix:
    type: PageType
    default: '.html'
    index: index
    map:
      .html: 0

1 Ответ

1 голос
/ 26 сентября 2019

Сообщаемая проблема на forge.typo3.org по-прежнему открыта (по состоянию на сентябрь 2019 г.).

На данный момент вы можете предоставить пользовательский декоратор PageType , который достигает желаемого результата.Даниэль Дорндорф, разработчик, который сообщил о проблеме, любезно разместил исходный код для этого:

/ Classes / Routing / Enhancer / CustomPageTypeDecorator.php

<?php

namespace Brand\Extensionname\Classes\Routing\Enhancer;

use TYPO3\CMS\Core\Routing\Enhancer\PageTypeDecorator;
use TYPO3\CMS\Core\Routing\RouteCollection;

/**
 * Class CustomPageTypeDecorator
 */
class CustomPageTypeDecorator extends PageTypeDecorator
{
    public const IGNORE_INDEX = [
        '/index.html',
        '/index/',
    ];

    public const ROUTE_PATH_DELIMITERS = ['.', '-', '_', '/'];

    /**
     * @param \TYPO3\CMS\Core\Routing\RouteCollection $collection
     * @param array $parameters
     */
    public function decorateForGeneration(RouteCollection $collection, array $parameters): void
    {
        parent::decorateForGeneration($collection, $parameters);

        /**
         * @var string $routeName
         * @var \TYPO3\CMS\Core\Routing\Route $route
         */
        foreach ($collection->all() as $routeName => $route) {
            $path = $route->getPath();

            if (true === \in_array($path, self::IGNORE_INDEX, true)) {
                $route->setPath('/');
            }
        }
    }
}

ext_localconf.php

<?php
defined('TYPO3_MODE') or die();

// Register custom PageTypeDecorator:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['enhancers'] += ['CustomPageType' => \Brand\Extensionname\Classes\Routing\Enhancer\CustomPageTypeDecorator::class];

Добавьте это в расширение шаблона, настройте пространство имен PHP (\Brand\Extensionname\) и все готово.

config.yaml

PageTypeSuffix:
  type: CustomPageType
  default: '.html'
  index: 'index'
  map:
    '.html': 0
...