4

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

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

感谢您的帮助:)

4

6 回答 6

16

您可以转到升级>运行升级向导并将向导在所有现有页面中引入 URL 部分(“slugs”)标记为已撤消。

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

UPDATE `pages` SET `slug` = NULL;
于 2018-10-26T12:18:02.893 回答
4

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

于 2019-02-01T10:19:29.850 回答
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 字段的名称

于 2020-03-04T12:38:40.043 回答
1

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

登录后台,

  1. 点击Upgrade menu下方ADMIN TOOLS
  2. 点击卡片Run Upgrade Wizard_Upgrade Wizard
  3. 在列表中检查Introduce URL parts ("slugs") to all existing pages并单击其向导。如果已经执行,请在列表下检查它Wizards marked as done并通过单击其Mark undone按钮重新激活它,并记住在它重新出现在顶部的向导列表中时执行它的向导。如果您遇到一条消息,则意味着您缺少空的 slug 字段。
于 2019-10-13T13:55:47.847 回答
1

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

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

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

向导仅在表中存在带有空 slug 的记录时才会显示。向导将忽略所有已设置的 Slug。(我已经测试过了 - 没有任何东西被破坏)。

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

于 2018-10-26T13:01:41.960 回答
0

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

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

于 2020-03-13T18:17:15.953 回答