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 ?