TYPO3 9.5 LTS - URL 段的自动(重新)生成?

TYPO3 9.5 LTS - Automatic (re)generation of URL Segments?

我删除了数据库中的所有 Slug,希望它们能自动重新生成 - 但它们没有!

有什么方法可以触发重生吗?从 TYPO3 < 9 升级时,最初生成 get - 但是如何生成?

感谢您的帮助:)

您可以前往升级>运行升级向导并标记向导介绍URL 部分 ("slugs") 到所有现有页面 已撤消。

之后您可以 运行 此向导并再次为所有页面填充 slug 字段。请注意,此向导仅处理具有空 slug 字段的页面。如果您想要处理所有现有页面,请执行这样的 SQL 查询:

UPDATE `pages` SET `slug` = NULL;

Mathias Brodala 的 Answere 完全符合我的要求。

我必须在使用向导之前准备数据库: UPDATE `pages` SET `slug` = NULL where 1

这将删除所有 (!!!) Slug,以便向导可以重新创建它们。

向导仅在 table 中存在带有空 slug 的记录时才会出现。 向导将忽略所有已设置的 Slug。 (我已经测试过了 - 什么都没有坏)。

一个简单有效的解决方案。再次感谢@Mathias Brodala

您还可以查看 "slug" 扩展,它提供了 slug 字段的批量编辑。 https://extensions.typo3.org/extension/slug/

TYPO3 具有用于此操作的内置机制。

登录后台,

  1. 单击 ADMIN TOOLS
  2. 下的 Upgrade menu
  3. 点击 Upgrade Wizard 卡片上的 Run Upgrade Wizard
  4. 在列表中检查 Introduce URL parts ("slugs") to all existing pages,然后单击其向导。如果已经执行,请在 Wizards marked as done 列表下检查它并通过单击它的 Mark undone 按钮重新激活它,并记得在它重新出现在顶部的向导列表中时执行它的向导。如果您遇到一条消息,则表示您缺少空的 slug 字段。

试试这个

public static function setPageSlug($uid) {
        $fieldConfig = $GLOBALS['TCA']['tablename']['columns']['slug_field_name']['config'];
        $slugHelper = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\DataHandling\SlugHelper::class, 'tablename', 'slug_field_name', $fieldConfig);

        $connection = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\ConnectionPool::class)->getConnectionForTable('tablename');
        $queryBuilder = $connection->createQueryBuilder();

        $queryBuilder->getRestrictions()->removeAll()->add(\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction::class));
        $statement = $queryBuilder->select('*')->from('tablename')->where(
        $queryBuilder->expr()->eq('uid', $uid)
        )->execute();

        $record = $statement->fetch();

        $slug = $slugHelper->generate($record, $record['pid']);

        // Update
        $queryBuilder = $connection->createQueryBuilder();
        $queryBuilder->update('tablename')->where(
        $queryBuilder->expr()->eq('uid', $uid)
        )->set('slug_field_name', $slug)->execute();

        var_dump($slug);
        return $slug;

        }

tablename => table 的名称,带有 slug 字段

slug_field_name => 相应的 slug 字段的名称

这会填充给定 table 的所有空 slug(例如,在将来自外部来源的记录导入自定义扩展后):

https://www.typo3tiger.de/blog/post/typo3-extension-slugs-automatisiert-generieren.html