Vor ein paar Monaten habe ich bereits darüber geschrieben, wie man aus z.B. einem Task, der E-Mails versendet, TYPO3 konform Links ins Frontend generieren kann. Nun habe ich das ganze in einen ViewHelper ausgelagert, damit man noch eleganter Links in Standalone-Templates generieren kann.
Hinwein: ich musste den Vendor und den Extensionnamen ändern, daher ist das nicht der tatsächlich funktionierende Code. Wenn es in der eigenen Extension nicht auf Anhieb klappt, dann Vendor und Extensionname anpassen.
Aufruf im Mail-Template:
{namespace my = My\Extension\ViewHelper} [...] <p><my:fe.link pageUid="{targetPageUid}" pluginName="Event" pluginArguments="{event: event}">zur Webseite mit Parameter</my:fe.link></p> [...]
Und das ist der ViewHelper, abzulegen in ViewHelper/Fe/LinkViewHelper.php:
<?php <?php namespace My\Extension\ViewHelper\Fe; class LinkViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper { /** * @var string */ protected $tagName = 'a'; /** * Arguments initialization * * @return void */ public function initializeArguments() { $this->registerUniversalTagAttributes(); $this->registerTagAttribute('name', 'string', 'Specifies the name of an anchor'); $this->registerTagAttribute('rel', 'string', 'Specifies the relationship between the current document and the linked document'); $this->registerTagAttribute('rev', 'string', 'Specifies the relationship between the linked document and the current document'); $this->registerTagAttribute('target', 'string', 'Specifies where to open the linked document'); } /** * @param int $pageUid * @param string $pluginName * @param array $pluginArguments * @return string content */ public function render($pageUid, $pluginName = NULL, $pluginArguments = NULL) { $this->initTSFE(); $cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectRenderer'); $additionalParams = ''; if(isset($pluginArguments) && is_array($pluginArguments) && isset($pluginName)) { foreach($pluginArguments as $key => $value) { $namespace = \TYPO3\CMS\Core\Utility\GeneralUtility::camelCaseToLowerCaseUnderscored($pluginName); if($value instanceof \TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject) { if ($value->getUid() !== NULL) { $additionalParams.= '&tx_extension_'.$namespace.'['.$key.']='.$value->getUid(); } } else { $additionalParams.= '&tx_extension_'.$namespace.'['.$key.']='.$value; } } } $uri = $cObj->typolink_URL(array('parameter' => $pageUid, 'additionalParams' => $additionalParams, 'forceAbsoluteUrl' => 1)); $this->tag->addAttribute('href', $uri, FALSE); $this->tag->setContent($this->renderChildren()); $this->tag->forceClosingTag(TRUE); return $this->tag->render(); } protected function initTSFE($id = 1, $typeNum = 0) { \TYPO3\CMS\Frontend\Utility\EidUtility::initTCA(); if (!is_object($GLOBALS['TT'])) { $GLOBALS['TT'] = new \TYPO3\CMS\Core\TimeTracker\NullTimeTracker; $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; } } } ?>