TYPO3 Tipps und Tricks: TYPO3 11 - Custom Backend Module mit List-Module

Um Redakteuren die Arbeit mit TYPO3 zu erleichtern, erstellen wir immer Backend-Module zum Verwalten der Datensätze (meist Extbase Models). Dazu verwenden wir die schon bereits bestehende Funktion des List-Modules. In diesem Blogbeitrag zeigen wir die Erstellung von Custom Backend Modulen auf Basis des List-Modules in TYPO3 Verison 11.

Zum Verwalten der Objekte im TYPO3-Backend werden normalerweise häufig die beiden Module "Liste" und "Seite" verwendet. Man wählt über das List-Modul im Page-Browser den Ordner mit den Objekten aus, und hat anschließend die gewünschte Darstellung. Um den Redakteuren dies zu erleichtern bzw. die Verwaltung übersichtlicher und einfacher zu gestalten, erstellen wir bei TYPO3-Web-Projekten, zusätzliche Backend-Module. 

Hier ein Screenshot wie ein TYPO3-Backend mit verschiedenen erstellen Backend-Modulen aussieht:

TYPO3-Backend mit Custom Backend-Modulen
TYPO3-Backend mit Custom Backend-Modulen

TYPO3-Backend-Module registrieren

Über die TYPO3-API muss zuerst das neue Backend-Module TYPO3 bekannt gemacht werden. In diesem Beispiel werden zwei Module registriert:

  • Zuerst das Hauptmodul "Verwaltung" -> Dies dient zur besseren Gliederung
  • Anschließend das Modul "Gegenstände" mit der List-View aller verfügbaren Gegenständen

Die geschieht in der Datei ext_tables.php.

// Verwaltungs MODULE\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(	'VaSite',	'main',	'',	'',	[],	[		'access' => 'user,group',		'icon' => 'EXT:va_site/Resources/Public/Icons/Module/main.svg',		'labels' => 'LLL:EXT:va_site/Resources/Private/Language/locallang_mod_main.xlf',	]);// Subjects MODULE\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(	'VaSite',	'main',	'tx_vasite_subjects',	'',	[		\Various\VaSite\Controller\BackendController::class => 'subjects',	],	[		'access' => 'user,group',		'icon' => 'EXT:va_site/Resources/Public/Icons/Module/subject.svg',		'labels' => 'LLL:EXT:va_site/Resources/Private/Language/locallang_mod_subjects.xlf',	]);

TYPO3 Backend-Controller

Im nächsten Schritt müssen wir für das Gegenstände-Modul noch die Funktionalität hinzufügen, damit das List-Module mit den richtigen Datensätzen im Backend erscheint. Dazu haben wir TYPO3 mitgeteilt (Zeile 22) dass bei einem Klick auf das Module die "subjects"-Action im BackendController aufgerufen wird. Im nächsten Snippet zeigen wir nun die Methode im Backend Controller:

<?phpnamespace Various\VaSite\Controller;use Various\VrsBase\Utility\BackendModuleUtility;class BackendController extends ActionController{    protected $siteConfig;    public function __construct()    {        $this->siteConfig = SiteConfiguration::get()->getConfiguration();    }    public function subjectsAction()    {        return BackendModuleUtility::getBackendModule($this->request, 'tx_vasite_domain_model_subject',            intval($this->siteConfig['vasite_books_subjectspid']));    }}

TYPO3 Backend List-View

Wie im obigen Code-Snippet bereits erahnt werden kann, versteckt sich die eigentliche Funktionalität in der Klasse BackendModuleUtility, an welche wir die gewünschte Tabelle und die PID des gewünschten Ordners übergeben. Wir lesen die PID aus den Seiteneigenschaften, kann aber natürlich auch statisch hinterlegt werden.

<?phpnamespace Various\VrsBase\Utility;use TYPO3\CMS\Core\Utility\GeneralUtility;use TYPO3\CMS\Extbase\Mvc\Request;use TYPO3\CMS\Recordlist\Controller\RecordListController;class BackendModuleUtility{    public static function getBackendModule($request, $table, $id, $searchLevels = false)    {        $recordListController = GeneralUtility::makeInstance(RecordListController::class);        //reflect Record List Controller to modify query params        $backendModuleRequest = new \ReflectionObject($request);        $requestProperty = $backendModuleRequest->getProperty('request');        $requestProperty->setAccessible(true);        $request = $requestProperty->getValue($request);        $serverRequest = new \ReflectionObject($request);        $queryParamsProperty = $serverRequest->getProperty('queryParams');        $queryParamsProperty->setAccessible(true);        $queryParams = $queryParamsProperty->getValue($request);        //set table and id        $queryParams['table'] = $table;        $queryParams['id'] = $id;        if ($searchLevels) {            //set search level            $queryParams['search_levels'] = $searchLevels;        }        $queryParamsProperty->setValue($request, $queryParams);        $newRequest = GeneralUtility::makeInstance(Request::class, $request);        return $recordListController->mainAction($newRequest);    }}

An dieser Stelle sei erwähnt, dass wir mittels Reflection zwei Eigenschaften auf "public" setzen, da diese sonst nicht gelesen bzw. geschrieben werden können:

  • $request
  • $queryParams

Der Request wird benötigt, um an die Query-Params (den Query Parameter) zu kommen. In den Query-Parametern setzen wir nun die gewünschte Tabelle und die ID des Ordners. Aktuell gibt es leider im List-View-Module von TYPO3 keine andere Möglichkeit, um diese Werte zu überschreiben oder zu setzen, deshalb haben wir uns für diesen Weg entschieden.

Der Ablauf funktioniert in TYPO3 11 - für die Verwendung in TYPO3 10 oder früher (9, 8 und 7) empfiehlt sich dieser Blog-Beitrag.

Zusammenfassung

Bei der Webentwicklung mit TYPO3 kann man den Redakteuren für die einfachere Verwendung und Verwaltung des TYPO3-Backends zusätzliche Module zur Verfügung stellen. Dazu muss zuerst das Module registriert werden und die Funktionalität im Controller implementiert werden. Dabei wird das List-Module als Basis verwendet und die Parameter Tabelle und die ID des gewünschten Ordners mit den Extbase-Objekten übergeben.

Hier findet man die TYPO3-Dokumentation zu den Backend Modulen.

Wir entwickeln digitale Lösungen mit Leidenschaft

Warum wir das tun? Weil die Verwirklichung Ihrer Vision unser größter Anspruch und die schönste Anerkennung ist. Deshalb nehmen wir uns gerne ausreichend Zeit für die Realisierung Ihres digitalen Projekts.

Kontaktieren Sie uns, wir sind gerne für Ihre Fragen da:

Passend zu diesem Thema:

TYPO3-Backend Module
Digital Agentur TYPO3 Website

TYPO3-Backend Module

Für die Verwaltung von TYPO3-Websites gibt es Backend Module, die sehr nützlich sind um Redakteuren eine saubere, aufgeräumte und intuitive Verwaltung…

TYPO3 Tipps und Tricks: (Custom) Sitemap entwickeln mittels ext:seo

TYPO3 Tipps und Tricks: (Custom) Sitemap entwickeln mittels ext:seo

In diesem Blogbeitrag zeigen wir, wie man mit TYPO3 unter Verwendung der SEO-Core-Extension eine eigene XML-Sitemap erstellen bzw. entwickeln kann.

TYPO3 Tipps und Tricks: Button Bar - Backend Buttons

TYPO3 Tipps und Tricks: Button Bar - Backend Buttons

Das TYPO3-Backend lässt sich flexibel an verschiedenen Stellen erweitern - in diesem Blogbeitrag werden wir uns nun ansehen, wie man das Backend um ei…