【发布时间】:2019-03-31 03:54:44
【问题描述】:
我已删除数据库中的所有 Slug,希望它们能够自动重新生成 - 但它们不会!
有什么方法可以触发再生吗?从 TYPO3
感谢您的帮助:)
【问题讨论】:
标签: url typo3 slug typo3-9.x lts
我已删除数据库中的所有 Slug,希望它们能够自动重新生成 - 但它们不会!
有什么方法可以触发再生吗?从 TYPO3
感谢您的帮助:)
【问题讨论】:
标签: url typo3 slug typo3-9.x lts
您可以转到升级 > 运行升级向导并将向导将URL部分(“slugs”)引入所有现有页面标记为撤消。
之后,您可以运行此向导并再次为所有页面填充 slug 字段。请注意,此向导仅处理具有空 slug 字段的页面。如果您希望处理所有现有页面,请执行如下 SQL 查询:
UPDATE `pages` SET `slug` = NULL;
【讨论】:
UPDATE `pages` SET `slug` = NULL; 准备您的页面。
Mathias Brodala 的回答完全符合我的要求。
在使用向导之前,我必须准备好数据库:
UPDATE `pages` SET `slug` = NULL where 1
这会删除所有(!!!)Slug,以便向导可以重新创建它们。
向导仅在表中有包含空 slug 的记录时才会显示。 向导将忽略所有已设置的 Slug。 (我已经对其进行了测试 - 没有任何损坏)。
简单有效的解决方案。再次感谢@Mathias Brodala
【讨论】:
您还可以查看“slug”扩展,它提供了 slug 字段的批量编辑。 https://extensions.typo3.org/extension/slug/
【讨论】:
TYPO3 有一个用于此操作的内置机制。
登录后台,
ADMIN TOOLS下的Upgrade menu
Upgrade Wizard卡片上点击Run Upgrade Wizard
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 => 带有 slug 字段的表的名称
slug_field_name => 对应的 slug 字段的名称
【讨论】:
这会填充给定表的所有空 slug(例如,在将来自外部来源的记录导入自定义扩展之后):
https://www.typo3tiger.de/blog/post/typo3-extension-slugs-automatisiert-generieren.html
【讨论】: