Mithilfe der Klassen SiteFinder und PageRouter ist es möglich, im CLI-Context (einfache) Frontend Links zu erzeugen. Diese Art der Implementierung ist recht schlank und hat den Vorteil, dass im Gegensatz zu anderen Varianten nicht das komplette TSFE erzeugt werden muss.
SiteFinder + PageRouter
/**
* getUnsubscribeUrl
*
* @param int $pageId
* @param Recipient $recipient
* @return string
*/
private function getUnsubscribeUrl(int $pageId, Recipient $recipient) {
/** @var SiteFinder $siteFinder */
$siteFinder = GeneralUtility::makeInstance(SiteFinder::class);
/** @var Site $site */
$site = $siteFinder->getSiteByPageId($pageId);
$parameters = [
'tx_newsletter_subscription' => [
'action' => 'edit',
'controller' => 'Subscription',
'r' => $recipient->getUid(),
'rH' => HashUtility::calculateHash($recipient->getUid())
]
];
return (string) $site->getRouter()->generateUri($pageId, $parameters);
}
In diesem Zusammenhang auch hilfreich eine ebenfalls (sehr schlanke) Methode, um mithilfe der Klassen TemplateService und PageRepository anhand einer gegebenen PageId die TypoScript Konfiguration im CLI Context verfügbar zu machen.
TemplateService + PageRepository
/**
* loadTypoScript
*
* @param int $pageId
* @return void
*/
private function loadTypoScript(int $pageId) {
/** @var TemplateService $template */
$template = GeneralUtility::makeInstance(TemplateService::class);
$template->tt_track = 0;
$template->init();
$sys_page = GeneralUtility::makeInstance(PageRepository::class);
$rootline = $sys_page->getRootLine($pageId);
$template->runThroughTemplates($rootline, 0);
$template->generateConfig();
// Now setup and constants are available like this
$this->setup = $template->setup['plugin.']['tx_newsletter_subscription.']['settings.'];
$this->constants = $template->setup_constants['plugin.']['tx_newsletter_subscription.']['settings.'];
}
Kommentare
https://extensions.typo3.org/extension/nnhelpers
Im Beispiel oben wäre es ein einfacher Aufruf dieser Methode:
\nn\t3::Page()->getLink( $pid, $params );
Die Extension ist voll von solchen Lösungen – hinter jedem Einzeiler stecken einige Stunden an Sucharbeit... alle Methoden sind wunderbar in einem übersichtlichen Backend-Modul zusammengefasst.