Bei einem Projekt war es sinnvoll, die Extension-Records direkt in der zweiten Ebene des Menüs auszugeben, um eine möglichst dynamische Lösung zu erzielen.
Diese Anleitung geht davon aus, dass das Menü mithilfe von HMENU/TMENU erstellt wird. Für das Beispiel verwenden wir die Extension „foo“ (Extension-Key).
Die Records werden über die itemArrayProcFunc
des HMENUs eingebunden.
Schritt 1: Erstellen der userFunc
in der Datei 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, die Link-Generierung und andere Elemente müssen selbstverständlich entsprechend 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 } }
Besten Dank, genau das was ich gesucht habe!
Hat mir viel Zeit gespart 🙂
Das ist cool, werde ich mal bookmarken für alle Fälle 😉
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 ?