generatorOptions

generatorOptions
Path

$GLOBALS['TCA'][$table]['columns'][$field]['config']

Type

array

Scope

Proc. / Display

Holds information about the record fields to be used for slug generation:

generatorOptions:fields
Type

array

Scope

Proc. / Display

Insert several field names (of type string) that will be considered during slug construction.

Can also be used as nested array to combine multiple fields [['nav_title', 'title'], 'other_field'].

Info

Inserting multiple fields in a simple array would result in an concatenated slug.

Nested array values would result in "take nav_title if not empty, otherwise take value from title".

Examples:

Configuration value

Values of an example page record

Resulting slug

['nav_title', 'title']

['title' => 'Products', 'nav_title' => '', 'subtitle' => '']

/products

['nav_title', 'title']

['title' => 'Products', 'nav_title' => 'Best products', 'subtitle' => '']

/best-products/products

[['nav_title', 'title']]

['title' => 'Products', 'nav_title' => 'Best products', 'subtitle' => '']

/best-products

['subtitle', 'nav_title', 'title']

['title' => 'Products', 'nav_title' => 'Best products', 'subtitle' => 'Product subtitle']

/product-subtitle/best-products/products

[['nav_title', 'title'], 'subtitle']

['title' => 'Products', 'nav_title' => 'Best products', 'subtitle' => 'Product subtitle']

/best-products/product-subtitle

[['seo_title', 'title'], ['nav_title', 'subtitle']]

['title' => 'Products', 'nav_title' => 'Best products', 'subtitle' => 'Product subtitle', 'seo_title' => 'SEO product title']

/seo-product-title/best-products

generatorOptions:fieldSeparator
Type

string

Scope

Proc. / Display

Default

"/"

This value will divide the slug parts. If a section value contains this very value, it will be replaced by the value given in fallbackCharacter.

generatorOptions:prefixParentPageSlug
Type

boolean

Default

true

Scope

Proc. / Display

The slugs of parent pages will be prefixed to the slug for the page itself. Disable it for shorter URLs, but take the higher chance of collision into consideration.

Note

This option is exclusively for page records. It won't have an effect on any other records.

generatorOptions:replacements
Type

array

Scope

Proc. / Display

It allows to replace strings of a slug part. Add one of more array items with the key being the string to replace and the value being the replacement string.

generatorOptions:postModifiers
Type

array

Scope

Proc. / Display

The "slug" TCA type includes a possibility to hook into the generation of a slug via custom TCA generation options.

Hooks can be registered via:

$GLOBALS['TCA'][$tableName]['columns'][$fieldName]['config']['generatorOptions']['postModifiers'][] = My\Class::class . '->method';

Consider $tableName = 'pages' and $fieldName = 'slug' inside EXT:myextension/Configuration/TCA/Overrides/table.php:

$GLOBALS['TCA']['pages']['columns']['slug']['config']['generatorOptions']['postModifiers'][] = \My\Class::class . '->modifySlug';

The method then receives an parameter array with the following values:

 [
    'slug' // ... the slug to be used
    'workspaceId' // ... the workspace ID, "0" if in live workspace
    'configuration' // ... the configuration of the TCA field
    'record' // ... the full record to be used
    'pid' // ... the resolved parent page ID
    'prefix' // ... the prefix that was added
    'tableName' // ... the table of the slug field
    'fieldName' // ... the field name of the slug field
];

All hooks need to return the modified slug value.

Examples

Generate a concatenated slug

../../../../_images/Slug4.png
EXT:styleguide/Configuration/TCA/tx_styleguide_elements_slugs.php
'columns' => [
    'slug_4' => [
        'exclude' => 1,
        'label' => 'slug_4',
        'config' => [
            'type' => 'slug',
            'generatorOptions' => [
                'fields' => [
                    'input_1',
                    'input_2',
                ],
                'prefixParentPageSlug' => false,
            ],
            'fallbackCharacter' => '-',
            'eval' => 'uniqueInSite',
            'default' => '',
        ],
    ],
]

Generate a slug from one field with a backup field if first is empty

../../../../_images/Slug5.png
EXT:styleguide/Configuration/TCA/tx_styleguide_elements_slugs.php
'columns' => [
    'slug_5' => [
        'exclude' => 1,
        'label' => 'slug_5',
        'config' => [
            'type' => 'slug',
            'generatorOptions' => [
                'fields' => [
                    [
                        'input_1',
                        'input_2',
                    ],
                ],
                'prefixParentPageSlug' => false,
            ],
            'fallbackCharacter' => '-',
            'eval' => 'uniqueInSite',
            'default' => '',
        ],
    ],
]

Example: remove all strings "(f/m)" from Jobtitles

This will change the provided slug 'Some Job in city1/city2 (f/m)' to 'some-job-in-city1-city2'.

../../../../_images/Slug3.png
EXT:styleguide/Configuration/TCA/tx_styleguide_elements_slugs.php
'columns' => [
    'slug_3' => [
        'exclude' => 1,
        'label' => 'slug_3',
        'description' => 'remove string (f/m)',
        'config' => [
            'type' => 'slug',
            'generatorOptions' => [
                'fields' => [
                    'input_3',
                ],
                'replacements' => [
                    '(f/m)' => '',
                    '/' => '-',
                ],
            ],
            'fallbackCharacter' => '-',
            'prependSlash' => true,
            'eval' => 'uniqueInPid',
        ],
    ],
]