Add proper content slug auto generated

This commit is contained in:
Daniel Siepmann 2021-12-08 11:26:46 +01:00
parent 98d841e5fc
commit 2c00571cb5
4 changed files with 71 additions and 3 deletions

View file

@ -0,0 +1,59 @@
<?php
declare(strict_types=1);
/*
* Copyright (C) 2021 Daniel Siepmann <coding@daniel-siepmann.de>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
namespace DanielSiepmann\DsSite\ViewHelpers\Format;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderStatic;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* Formats a given string to be a valid HTML id attribute value.
*/
class IdViewHelper extends AbstractViewHelper
{
use CompileWithContentArgumentAndRenderStatic;
public function initializeArguments()
{
$this->registerArgument('value', 'string', 'string to format');
}
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
) {
$value = $renderChildrenClosure();
if (!is_string($value) && !(is_object($value) && method_exists($value, '__toString'))) {
return $value;
}
$value = (string)$value;
$value = str_replace(' ', '_', $value);
$value = preg_replace('#\W#', '', $value);
$value = GeneralUtility::underscoredToUpperCamelCase($value);
$value = lcfirst($value);
return $value;
}
}

View file

@ -1,7 +1,7 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/Fluid/ViewHelpers" <html xmlns:f="http://typo3.org/ns/TYPO3/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"> data-namespace-typo3-fluid="true">
<a name="c{uid}"></a> <a name="{header -> f:format.id()}"></a>
<f:if condition="{layout} != 'hidden'"> <f:if condition="{layout} != 'hidden'">
<h{layout}>{header} <small><a href="#c{uid}"></a></small></h{layout}> <h{layout}>{header} <small><a href="#{header -> f:format.id()}"></a></small></h{layout}>
</f:if> </f:if>
</html> </html>

View file

@ -54,7 +54,7 @@
<f:for each="{pageContent}" as="contentEntry"> <f:for each="{pageContent}" as="contentEntry">
<f:if condition="{contentEntry.data.header}"> <f:if condition="{contentEntry.data.header}">
<li> <li>
<a href="#c{contentEntry.data.uid}">{contentEntry.data.header}</a> <a href="#{contentEntry.data.header -> f:format.id()}">{contentEntry.data.header}</a>
</li> </li>
</f:if> </f:if>
</f:for> </f:for>

View file

@ -14,6 +14,15 @@
], ],
], ],
], ],
'SYS' => [
'fluid' => [
'namespaces' => [
'f' => [
99 => 'DanielSiepmann\\DsSite\\ViewHelpers',
],
],
],
],
]); ]);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addUserTSConfig( \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addUserTSConfig(
"@import 'EXT:ds_site/Configuration/UserTSconfig/*.tsconfig'" "@import 'EXT:ds_site/Configuration/UserTSconfig/*.tsconfig'"