Menü für eigene Tabellen

Menü für selbst entwickelte Extensions

Um Menüs für eigene Tabellen (z.B. in selbst entwickelten Extensions) zu erzeugen definiert man zunächst das Typoskript für das Menü und setzt special.userFunc auf eine eigene Funktion Menu->makeMenuArray (siehe weiter unten):

lib.TEST = HMENU
lib.TEST{
  special = userfunction
  special.userFunc = RSYS\RsystemplateBootstrap\UserFunctions\Phpcode->main
  special.userFunc.table = tx_myextension_mytable
  special.userFunc.reverseOrder = 0
  1 = TMENU
  1.wrap = <ul class="level-1">|</ul>
  1.NO = 1
  1.NO {
    wrapItemAndSub = <li>|</li>
  }
  2 = TMENU
  2.wrap = <ul class="level-2">|</ul>
  2.NO = 1
  2.NO {
    wrapItemAndSub = <li>|</li>
  }
  3 = TMENU
  3.wrap = <ul class="level-3">|</ul>
  3.NO = 1
  3.NO {
    wrapItemAndSub = <li>|</li>
  }
}

Die Parameter table und reverseOrder sind in diesem Fall Parameter, die der userFunc übergeben werden, das ist hier nur ein Beispiel, real werden wohl mehrere Parameter benötigt.

Die Funktion, welche das Menü letztlich erzeugt liegt in RSYS\RsystemplateBootstrap\UserFunctions\Menu.php und sieht folgendermassen aus:

final class Menu{
    public function makeMenuArray(string $content, array $conf): array {
        $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($conf['userFunc.']['table']);
        $result = $connection->select(
              ['header'],
              $conf['userFunc.']['table'],
              ['pid' => (int)$GLOBALS['TSFE']->id],
              [],
              ['sorting' => $conf['reverseOrder'] ? 'DESC' : 'ASC']
        );
        $output = [];
        foreach ($result as $row) {
            $output[] = [ 'title' => $row['header'], '_OVERRIDE_HREF' => 'index.php?id=10&record=' . $row['uid', ];
        }
        return $output;
    }
}

Erstellt: 07/2010| Geändert: 03/2023