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 ?