【问题标题】:TYPO3 9.5 LTS - Automatic (re)generation of URL Segments?TYPO3 9.5 LTS - URL 段的自动(重新)生成?
【发布时间】:2019-03-31 03:54:44
【问题描述】:

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

有什么方法可以触发再生吗?从 TYPO3

感谢您的帮助:)

【问题讨论】:

    标签: url typo3 slug typo3-9.x lts


    【解决方案1】:

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

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

    UPDATE `pages` SET `slug` = NULL;
    

    【讨论】:

    • 为确保“此向导仅处理带有空 slug 字段的页面”,请使用 UPDATE `pages` SET `slug` = NULL; 准备您的页面。
    • 感谢@twigmac,我已将此添加到我的答案中。
    【解决方案2】:

    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 或基于作曲家的系统 bin/typo3 upgrade:pagesSlugs
    【解决方案3】:

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

    【讨论】:

    • 第一眼:不错1!!第二眼:它是一个有问题的测试版——但我会关注这个项目。看起来很有希望 :) 感谢您指向此扩展程序。
    • @Naderio 现在应该稳定了。所以我会接受这是一个很好的解决方案
    • 是的,它很稳定,似乎可以正常工作。感谢您的提示。
    【解决方案4】:

    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 字段。

    【讨论】:

      【解决方案5】:

      试试这个

      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 字段的名称

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-19
          • 2019-07-21
          相关资源
          最近更新 更多