В 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.
При запуске задачи вручную из серверной части этот код отлично работает и генерирует URL-адреса на основе uid страницы. Но при запуске через Cronjob создается следующий вывод:
The parsedUri "http:///www/sites/webXXXX/html/typo3/sysext/core/bin/typo3" appears to be malformed
Я пытался сгенерировать ссылки несколькими способами, но все они получали одно и то же сообщение об ошибке. Я не уверен, что здесь пытается Cronjob, поскольку приведенный выше parsedUri выглядит совершенно неправильно.
Кто-нибудь испытывал подобные проблемы с Cronjobs и TYPO3 v10? Связан ли этот сервер или что-то, что я могу исправить с помощью PHP? Я действительно не знаю причины этого.
Также проверьте этот ответ - первый образец работает так же, как и в задаче Планировщика в 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. Проблема в том, что у некоторых ссылок должен быть якорь, иначе я бы просто извлек uid из ссылки t3:// и оставил его таким.
UriBuilder требует контекста контроллеров, попасть в задачу планировщика будет сложно. Опубликуйте весь класс задачи, чтобы можно было проверить.






Я попробую (непроверено):
$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);
Только что проверил ваш код в TYPO3
10.4.12, и он работает, как ожидалось - генерирует действительный URL-адрес для записи страницы, так как вы не показали нам объявление вашего методаlinkCommand(). Я скопировал его из этот вопрос.