【问题标题】:Generate Typolink in Backend Environment with Cronjob使用 Cronjob 在后端环境中生成 Typolink
【发布时间】:2021-08-02 17:05:17
【问题描述】:

使用 TYPO3 9.5,我们能够以这种方式从调度程序类中生成 Typolink:

$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$contentRenderer = $objectManager->get(\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::class);
$command = $this->linkCommand($uid, 0);
$uri = $contentRenderer->typoLink_URL($command);
return $uri;

对于 TYPO3 v10,当通过 Cronjob 调用时,相同的代码不再工作。

从后端手动运行任务时,此代码运行良好,并根据页面 uid 生成 URL。但是通过 Cronjob 运行时,会产生如下输出:

The parsedUri "http:///www/sites/webXXXX/html/typo3/sysext/core/bin/typo3" appears to be malformed

我尝试以多种方式生成链接,但它们都以相同的错误消息结束。我不确定 Cronjob 在这里尝试什么,因为上面的 parsedUri 看起来完全错误。

有人遇到过与 Cronjobs 和 TYPO3 v10 类似的问题吗?这个服务器是相关的,还是我可以通过 PHP 修复的东西?我真的不知道这是什么原因。

【问题讨论】:

  • 刚刚检查了您在 TYPO3 10.4.12 中的代码,它按预期工作 - 生成页面记录的有效 URL,因为您没有向我们展示您的 linkCommand() 方法声明我从 @ 复制了一个987654321@
  • 另外,测试this answer - 第一个样本在10.x 中的调度程序任务中也能正常工作
  • @biesior 第二个答案在使用简单的 UID 生成链接时效果很好,谢谢。但有些链接也看起来像 t3://page?uid=500#5996,而且该功能似乎只适用于普通 uid。
  • 确实t3:// 链接可以使用typolink 转换为普通链接。这意味着您需要调试,为什么您的不起作用。请告诉我你的整个linkCommand() 方法声明。并且告诉你,你使用的是哪个版本的 TYPO3。
  • TYPO3 版本是 10.4.13,linkCommand() 函数与您在第一个链接示例中看到的基本相同,除了语言参数。但我也尝试使用TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder。同样的问题,不适用于 Cronjob。问题是某些链接需要有一个锚点,否则我只会从t3://链接中提取uid并保持原样。

标签: php cron typo3 typo3-9.x typo3-10.x


【解决方案1】:

我会试一试(未经测试):

$t3Urn = 't3://page?uid=500#5996';

// LinkService to get typolink configuration from t3://...
$typolinkConfig = GeneralUtility::makeInstance(
  \TYPO3\CMS\Core\LinkHandling\LinkService::class
)->$linkService->resolve($t3Urn);

// Absolute (if needed). Make sure that Site config contains a full base for the 
// requested page rootline AND that this base is also active in your cron environment.
// If you use application context to resolve bases, add it to the scheduler env:
// TYPO3_CONTEXT=Production/MySubcontext …/vendor/bin/typo3 scheduler:run
$typolinkConfig['forceAbsoluteUrl'] = true;

return GeneralUtility::makeInstance(
  \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::class
)->typoLink_URL($typolinkConfig);

【讨论】:

  • 没用,收到一个空字符串。但是我现在能够通过一种解决方法来解决它。无论如何,谢谢。
  • @Andreas 你能告诉我这个解决方法吗,因为我遇到了完全相同的问题?
  • @biedert 我无法再访问这个项目,而且已经有一段时间了。但我记得只是从t3...link 中提取(获取=# 之间的所有内容)页面ID 并从那里开始工作。
  • @Andreas 无论如何,谢谢,我通过使用 \TYPO3\CMS\Backend\Utility\BackendUtility::getPreviewUrl() 解决了这个问题
  • 是的,我认为没有办法绕过使用真实 SiteLanguage 生成最终 URL 的真实站点。
猜你喜欢
  • 1970-01-01
  • 2011-09-21
  • 2019-07-26
  • 2018-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 2018-08-02
相关资源
最近更新 更多