TYPO3: Frontend Links aus Backend Modul

Aus einem Task sollen Links zu Seiten generiert und per E-Mail verschickt werden. Wenn man den Fluid ViewHelper verwendet, dann werden Links ins Backend generiert. Es ist in dem Fall nicht das gewünschte Verhalten, aber sinnvoll. Sehr viel habe ich leider nicht dazu gefunden: einem Beitrag auf wissen.netzhaut.de und einen Beitrag im Forum auf typo3.net, der sich auf den Artikel vorher bezieht. Der Artikel auf netzhaut.de enthält noch die alten Klassennamen, diese müssen daher auf Namespaces angepasst werden. Weiterhin habe ich die Funktion umbenannt und noch ein paar Dinge verschönert. In meinem Fall nutze ich den Code in einem Scheduler-Task. Das ist meine Lösung:

class SendReminderTask extends \TYPO3\CMS\Scheduler\Task\AbstractTask {
	public function execute() {
		[...]
 
		$this->initFrontend();
 
		foreach($documents as $document) {
			[...]
 
			$cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer');
			$linkConf = array(
				'parameter' => $this->extConf['targetPageUid'],
				'forceAbsoluteUrl' => 1,
				'additionalParams' => \TYPO3\CMS\Core\Utility\GeneralUtility::implodeArrayForUrl(NULL, array(
					'tx_myextension[action]' => 'extend',
					'tx_myextension[document]' => $document->getUid(),
					'tx_myextension[hash]' => $document->getHash(),
				)),
				'linkAccessRestrictedPages' => 1
			);
			$link = $cObj->typolink_URL($linkConf);
 
			[...]
		}
 
		return TRUE;
	}
 
	/*
	 * init frontnend to render frontend links in task
	 */
	protected function initFrontend() {
		$id = 1;
		$type = 0;
		if (!is_object($GLOBALS['TT'])) {
			$GLOBALS['TT'] = new \TYPO3\CMS\Core\TimeTracker\TimeTracker;
			$GLOBALS['TT']->start();
		}
		$GLOBALS['TSFE'] = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController',  $GLOBALS['TYPO3_CONF_VARS'], $id, $typeNum);
		$GLOBALS['TSFE']->connectToDB();
		$GLOBALS['TSFE']->initFEuser();
		$GLOBALS['TSFE']->determineId();
		$GLOBALS['TSFE']->initTemplate();
		$GLOBALS['TSFE']->getConfigArray();
 
		if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('realurl')) {
			$rootline = \TYPO3\CMS\Backend\Utility\BackendUtility::BEgetRootLine($id);
			$host = \TYPO3\CMS\Backend\Utility\BackendUtility::firstDomainRecord($rootline);
			$_SERVER['HTTP_HOST'] = $host;
		}
	}
}

Kommentare sind geschlossen.