我已经在数据库中删除了所有的Slugs,希望它们能够自动生成-但是它们没有!
有没有办法触发重新生成?在从TYPO3 < 9升级时,它们最初是由系统自动生成的-但是如何操作呢?
谢谢您的帮助 :)
UPDATE `pages` SET `slug` = NULL;
尝试这个
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字段的名称
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字段。Mathias Brodala的答案完全符合我的要求。
在使用向导之前,我必须准备好数据库:
UPDATE `pages` SET `slug` = NULL where 1
这会删除所有(!!!)的Slug,以便可以通过向导重新创建。
只有当表中存在空的slug记录时,向导才会显示出来。 已经设置的所有Slug将被向导忽略。(我已经测试过了 - 没有任何损坏)。
一个简单而有效的解决方案。再次感谢@Mathias Brodala。
这个函数会为给定的表填充所有空白的slug(例如,在将记录从外部来源导入到自定义扩展后):
https://www.typo3tiger.de/blog/post/typo3-extension-slugs-automatisiert-generieren.html
UPDATE \
pages` SET `slug` = NULL;`准备您的页面。 - twigmac