TYPO3: Edit-Links im eigenen Backend-Modul

In TYPO3 gibt existieren ja bereits einige Möglichkeiten, um Datensätze zu bearbeiten oder zu löschen. Manchmal reichen die normalen Ansichten nicht aus und man entwickelt ein Backend-Modul. Um nicht alle Formulare zum bearbeiten und erstellen von Datensätzen (inkl. Validierung!) neu zu implementieren, gibt es eine Möglichkeit aus dem eigenen Backend-Modul links zu den „normalen“ Funktionen in TYPO3 zu setzen. So habe ich z.B. eine Reihe von Veranstaltungen, die ich in meinem Backend-Modul anzeigen möchte. Sobald der Datensatz einer Veranstaltung bearbeitet werden soll, reichen mir für die Bearbeitung die TYPO3-Bordmittel.

Ein bisschen Suche hat ergeben, dass es eine solche Möglichkeit natürlich gibt – Artikel auf docs.typo3.org. Die Vorgehensweise ist folgende: man schreibt einen ViewHelper, der die Links generiert. Der Code für den ViewHelper ist auf der verlinkten Seite aber unvollständig: es gibt eine Extension namens „examples“, die sich über den Extension Manager installieren lässt und in der Datei \Documentation\Examples\ViewHelpers\Be\EditLinkViewHelper.php den Code des kompletten ViewHelpers enthält.

Wenn man die Extension „examples“ installiert und testet, dann stellt man schnell fest, dass sie buggy ist. Der Link an sich funktioniert, aber der Link zurück liefert den Fehler „invalid form/module token“. Außerdem ist es eigentlich nicht schön, dass man die returnUrl im Template setzen muss, meistens will man ja nur dahin zurück, wo man hergekommen ist. Also habe ich den ViewHelper angepasst: Die ReturnUrl wird automatisch gesetzt und das moduleToken ebenfalls.

public function render($parameters, $returnUrl = '') {
	$uri = 'alt_doc.php?' . $parameters;
	if (!empty($returnUrl)) {
		$uri .= '&returnUrl=' . rawurlencode($returnUrl);
	} else {
		$returnUrl = 'mod.php?M='.$_GET['M'].'&moduleToken='.$_GET['moduleToken'];
		$uri .= '&returnUrl=' . rawurlencode($returnUrl);
	}
 
	$this->tag->addAttribute('href', $uri);
	$this->tag->setContent($this->renderChildren());
	$this->tag->forceClosingTag(TRUE);
	return $this->tag->render();
}

Kommentare sind geschlossen.