Actions
Feature #106072
openEnable Regex in slug field generatorOptions replacements
Status:
Under Review
Priority:
Should have
Assignee:
Category:
Site Handling, Site Sets & Routing
Target version:
-
Start date:
2025-02-03
Due date:
% Done:
0%
Estimated time:
PHP Version:
Tags:
slug
Complexity:
easy
Sprint Focus:
Description
The slug field provides the option to define replacements: https://docs.typo3.org/m/typo3/reference-tca/main/en-us/ColumnsConfig/Type/Slug/Index.html#confval-slug-generatoroptions-replacements
When having to deal with large multilingual sites, there is the typical gender addition on for example job titles: (f/m), (m/w/d), (w/m/d),...
To remove them form slugs, one need to define any of these variations in the replacements array as the replacement method used is: str_replace
. Switching to preg_replace
would open a lot of new possibilities with regex to define those replacements.
Replacing str_replace with preg_replace is a breaking change!
$replaceConfiguration = $this->configuration['generatorOptions']['replacements'] ?? [];
$pieceOfSlug = str_replace(
array_keys($replaceConfiguration),
array_values($replaceConfiguration),
$pieceOfSlug
);
Comparison of definitions
str_replace | preg_replace |
---|---|
'title with replace' => [ 'Product Cow', '/parent-page/product-pig', [ 'generatorOptions' => [ 'fields' => ['title'], 'prefixParentPageSlug' => true, 'replacements' => [ 'Cow' => 'pig', ], ], ], ], 'title with slash and replace' => [ 'Product/Cow', '/parent-page/productcow', [ 'generatorOptions' => [ 'fields' => ['title'], 'prefixParentPageSlug' => true, 'replacements' => [ '/' => '', ], ], ], ], 'title with slash and replace #2' => [ 'Some Job in city1/city2 (m/w)', '/parent-page/some-job-in-city1-city2', [ 'generatorOptions' => [ 'fields' => ['title'], 'prefixParentPageSlug' => true, 'replacements' => [ '(m/w)' => '', '/' => '-', ], ], ], ], |
'title with replace' => [ 'Product Cow', '/parent-page/product-pig', [ 'generatorOptions' => [ 'fields' => ['title'], 'prefixParentPageSlug' => true, 'replacements' => [ '/Cow/' => 'pig', ], ], ], ], 'title with slash and replace' => [ 'Product/Cow', '/parent-page/productcow', [ 'generatorOptions' => [ 'fields' => ['title'], 'prefixParentPageSlug' => true, 'replacements' => [ '/\//' => '', ], ], ], ], 'title with slash and replace #2' => [ 'Some Job in city1/city2 (m/w)', '/parent-page/some-job-in-city1-city2', [ 'generatorOptions' => [ 'fields' => ['title'], 'prefixParentPageSlug' => true, 'replacements' => [ '/\(m\/w\)/' => '', '/\//' => '-', ], ], ], ], 'title with slash and replace #3' => [ 'Some Job in city1/city2 (m/w)', '/parent-page/some-job-in-city1-city2', [ 'generatorOptions' => [ 'fields' => ['title'], 'prefixParentPageSlug' => true, 'replacements' => [ '/\(.*\)/' => '', '/\//' => '-', ], ], ], ], |
Actions