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

4

我已经在数据库中删除了所有的Slugs,希望它们能够自动生成-但是它们没有!

有没有办法触发重新生成?在从TYPO3 < 9升级时,它们最初是由系统自动生成的-但是如何操作呢?

谢谢您的帮助 :)

6个回答

17
你可以前往 升级 > 运行升级向导,并将向导中的为所有现有页面引入URL部分("slug")标记为未完成。
之后,你可以运行这个向导,使得所有页面的slug字段再次被填充。请注意,此向导仅处理slug字段为空的页面。如果您希望处理所有现有页面,请执行此SQL查询:
UPDATE `pages` SET `slug` = NULL;

1
为确保“此向导仅处理具有空白标识字段的页面”,请使用UPDATE \pages` SET `slug` = NULL;`准备您的页面。 - twigmac
谢谢@twigmac,我已经将这个加入到我的回答中了。 - Mathias Brodala

4

第一印象:不错!第二印象:这是一个有问题的测试版,但我会关注这个项目。看起来很有前途 :)感谢指向这个扩展。 - Naderio
1
@Naderio现在应该是稳定的了。所以我会接受这个作为一个好的解决方案。 - Spears
是的,它很稳定,似乎正在工作。谢谢你的提示。 - Naderio

2

尝试这个

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 => 表名,其中包含slug字段

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


1
TYPO3拥有内置机制来执行此操作。
登录后台,
1. 点击 ADMIN TOOLS 下的 Upgrade menu 2. 在 Upgrade Wizard 卡片上点击 Run Upgrade Wizard 3. 在列表中查找 Introduce URL parts ("slugs") to all existing pages 并单击其向导。如果已经执行,请在 Wizards marked as done 列表下查找并通过单击其 Mark undone 按钮重新激活它,并记得在它重新出现在向导列表顶部时执行其向导。如果遇到消息,则表示您缺少空白的slug字段。

1

Mathias Brodala的答案完全符合我的要求。

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

这会删除所有(!!!)的Slug,以便可以通过向导重新创建。

只有当表中存在空的slug记录时,向导才会显示出来。 已经设置的所有Slug将被向导忽略。(我已经测试过了 - 没有任何损坏)。

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


我在使用TYPO3 9.5.14时遇到了麻烦,因为有很多站点和翻译。页面返回503状态。我使用命令行启动向导typo3/sysext/core/bin/typo3 upgrade:pagesSlugs或基于composer的系统bin/typo3 upgrade:pagesSlugs。 - CalleKhan

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接