TYPO3 Extension Records innerhalb eines TypoScript Menüs ausgeben

Bei einem Projekt machte es wirklich Sinn direkt die Extension-Records in der 2. Ebene des Menüs auszugeben, um möglichst dynamisch zu bleiben.

Diese Anleitung hier setzt voraus, dass das Menü mit einem HMENU/TMENU generiert wird. Als Extension nehmen wir für dieses Beispiel foo (Exension-Key).

Eingefügt werden die Records über die itemArrayProcFunc des HMENUs.

Schritt 1) erstellen der userFunc  EXT:foo/class.user_menuItemArrayProcFunc.php

<?php
 
class user_menuItemArrayProcFunc {
 
    public function process($menuArr, $conf) {
 
        $pObj = $conf['parentObj'];
        $parentPageId = $pObj->id;
 
        // Unterhalb dieser Seite sollen die Records eingefügt werden
        if ($conf['parentPageId'] == $parentPageId) {
 
            $detailPageRow = $GLOBALS['TSFE']->sys_page->getPage($conf['detailPageId']);
 
            if (is_array($detailPageRow)) {
 
                $getVars = t3lib_div::_GET();
 
                $table = 'tx_foo_domain_model_entry';
                $cObj = t3lib_div::makeInstance('tslib_cObj');
                $entries = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('title,uid,pid', $table, 'sys_language_uid=0 AND deleted=0 AND hidden=0');
 
                foreach ($entries as $entry) {
 
                    // record overlay für Übersetzungen
                    $entry = $GLOBALS['TSFE']->sys_page->getRecordOverlay($table, $entry, $GLOBALS['TSFE']->sys_language_uid);
 
                    $item = $detailPageRow;
                    $item['title'] = $entry['title'];
 
                    // Link zur Detailansicht des Records generieren
                    $url = $cObj->typoLink_URL(array(
                        'parameter' => $conf['detailPageId'],
                        'additionalParams' => '&' . http_build_query(array(
                            'tx_foo_plugin' => array(
                                'entry' => $entry['uid'],
                                'action' => 'show',
                                'controller' => 'Entry'
                            )
                        ))
                    ));
 
                    $item['_OVERRIDE_HREF'] = $url;
                    $item['ITEM_STATE'] = 'NO';
 
                    if ($entry['uid'] == $getVars['tx_foo_plugin']['entry'])
                        $item['ITEM_STATE'] = 'ACT';
 
                    $menuArr[] = $item;
                }
            }
        }
 
        return $menuArr;
    }
}
?>

Tabellen, Link Generierung usw. müssen natürlich angepasst werden.

2) Einfügen der userFunc in das HMENU

# proc func für foo records
includeLibs.user_menuItemArrayProcFunc = EXT:foo/class.user_menuItemArrayProcFunc.php

lib.mainNav = HMENU
lib.mainNav {

    special = directory   
    special.value = 1

    wrap = <ul>|</ul>

    # 1. Ebene
    1 = TMENU
    1 {       
        expAll = 1                                       
        NO {   

            ATagTitle.field = nav_title//title              
            wrapItemAndSub = <li>|</li>
        }               
    }

    # 2. Ebene - Submenü
    2 < .1
    2 {
      wrap = <ul>|</ul>       

      # unsere itemArrayProcFunc
      itemArrayProcFunc = user_menuItemArrayProcFunc->process

      # parentPageId - unterhalb dieser Seite werden die Records eingefügt
      itemArrayProcFunc.parentPageId = 3
      # detailPageId - Seite mit der Detailansicht des Records
      itemArrayProcFunc.detailPageId = 46   

    }
}

 

3 Gedanken zu „TYPO3 Extension Records innerhalb eines TypoScript Menüs ausgeben“

  1. Ich benötige das Feature auch gerade. Leider klappt es unter TYPO 3 7.6. nicht mehr, da die Einbindung der Userfunc anders läuft. Vllt. hat jemand ein Update für TYPO 7.6 ?

Schreibe einen Kommentar

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