[TYPO3-german] ObjectManager und UriBuilder manuell instanzieren
Jost Baron
jost.baron at gmx.de
Mon Jun 8 16:36:49 CEST 2015
Moin!
Ich hab das Problem neulich auch gehabt, und es wie unten angehängt gelöst.
So richtig schick ist das nicht. Die größte Schwierigkeit ist, dass der
generierte Link von der Seite abhängt, auf der er generiert wird. Die ID
der Seite rauszukriegen ist aber nicht so einfach, weil im Backend nicht
immer eine Seite gewählt ist (insbesondere in Scheduler-Tasks nicht).
Wenn man einen RTE baut, ist das kein Problem - dort bekommt man die PID
übergeben.
Nachdem man das Code-Stück unten ausgeführt hat, kann man sich ein
Objekt der Klasse
"\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer" injezieren
lassen, und mit der typoLink()-Methode und ihren Verwandten die Links
generieren.
HTH,
Jost
Code:
if (!isset($GLOBALS['TSFE'])) {
$pid = (int)GeneralUtility::_POST('pid');
$rootline =
\TYPO3\CMS\Backend\Utility\BackendUtility::BEgetRootLine($pid);
foreach ($rootline as $page) {
if ($page['is_siteroot']) {
$id = (int)$page['uid'];
break;
}
}
$type = 0;
if (!is_object($GLOBALS['TT'])) {
$GLOBALS['TT'] = new \TYPO3\CMS\Core\TimeTracker\NullTimeTracker;
$GLOBALS['TT']->start();
}
$GLOBALS['TSFE'] =
GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController',
$GLOBALS['TYPO3_CONF_VARS'], $id, $type);
$GLOBALS['TSFE']->connectToDB();
$GLOBALS['TSFE']->initFEuser();
$GLOBALS['TSFE']->determineId();
$GLOBALS['TSFE']->initTemplate();
$GLOBALS['TSFE']->getConfigArray();
if
(\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('realurl')) {
$host =
\TYPO3\CMS\Backend\Utility\BackendUtility::firstDomainRecord($rootline);
$_SERVER['HTTP_HOST'] = $host;
}
}
On 08.06.2015 13:01, Aimeos wrote:
> Hallo
>
> Wenn man versucht, den UriBuilder über den ObjectManager in einem
> Scheduler Task manuell zu instanzieren, dann fehlen dort abhängige
> Objekte, namentlich der ContentObjectRenderer:
>
> $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
> 'TYPO3\CMS\Extbase\Object\ObjectManager' );
> $uriBuilder = $objectManager->get(
> 'TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder' );
> $uriBuilder->initializeObject();
>
> Die letzte Zeile bringt auch nichts, das Objekt fehlt trotzdem und es
> gibt einen Fatal Error:
>
> PHP Fatal error: Call to a member function typoLink_URL() on a
> non-object in
> .../typo3/sysext/extbase/Classes/Mvc/Web/Routing/UriBuilder.php on line
> 640 (TYPO3 6.2).
>
> Wie bekommt man ein funktionierendes UriBuilder Objekt, mit dem man
> FE-Links erzeugen kann?
> Vielen Dank
>
More information about the TYPO3-german
mailing list