TYPO3: BE Modul mit persistenten Menü

Wie ein Backend Modul mit Extbase/Fluid erstellt und dort auch ein Menü anbietet, kann man in diesem Artikel nachlesen.

Damit dieses Menü sich nun aber den zuvor ausgewählten Menüpunkt merkt, auch wenn man zwischenzeitlich in einem anderen BE Modul war oder im Seitenbaum klickt, muss man den letzten Menüstatus für den Backend-User abspeichern und beim Aufrufen des BE Moduls prüfen, ob dieser gesetzt ist und ggf. auf ihn weiterleiten:

namespace TYPO3\MyExt\Controller;
class BackendController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
 
    /**
     * Redirect to the saved menu item
     */
    protected function initializeAction() {
        $vars = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET('tx_myext_web_myexttxmyextm1');
        // redirect only, if no menu item has been selected and if the last selection has been saved
        $lastActionMenuItem = $GLOBALS['BE_USER']->uc['my_ext']['lastActionMenuItem'];
        if(!$vars['action'] && $lastActionMenuItem) {
            // one redirect is enough
            self::saveState();
            // redirect
            $this->redirect($lastActionMenuItem);
        }
    }
 
    public function indexAction() {
        // save selected menu item
        self::saveState('index');
    }
 
    /**
     * Save the selected menu item
     *
     * @param string $actionMenuItem
     * @return void
     */
    protected static function saveState($actionMenuItem = '') {
        $GLOBALS['BE_USER']->uc['my_ext']['lastActionMenuItem'] = $actionMenuItem;
        $GLOBALS['BE_USER']->writeUC();
    }
}

Die genaue Schreibweise des GET-Parameters „tx_myext_web_myexttxmyextm1“ findet man am leichtesten heraus, indem man sich die Adresse des Iframes des BE Moduls anzeigen lässt. Der Platzhalter „my_ext“ ist der Extension-Key, „MyExt“ ist der Extension-Key in CamelCase Schreibweise.

Abgeschaut bei System-Extension „reports“.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.