Hallo Forum!
Ich will hier ein Menü bauen, das zufällig im Seitenbaum beginnt und dann die Reihenfolge des Baumes beibehält und am Ende der Liste wieder am Anfang die restlichen anhängt.
Also zum Beispiel:
Seitenbaum Webpage
nav
|- Seite 1 |- Seite 3
|- Seite 2 |- Seite 4
|- Seite 3 |- Seite 5
|- Seite 4 |- Seite 6
|- Seite 5 |- Seite 1
|- Seite 6 |- Seite 2
Per Session speichere ich diesen Zustand, so daß der aktuelle User dieses Menü angezeigt bekommt, bis er das nächste mal die Seite aufruft. Danach wird wieder ein "neuer" Menüaum berechnet.
Da ich mir schwer vorstellen kann, dieses mit TS umzusetzen, muss ich wohl ein Menü selbst basteln.
In der TSREF sieht das relativ einfach aus, aber leider hapert es bei mir bei der technischen Umsetzung.
Was ich von Euch bräuchte wäre eine Snippet eines _funktionierenden_ Userfunction-Menüs, also den Part im TS und ein PHP-File.
Ich bekomme es nämlich einfach nicht hin, dass mein Script angesprochen wird. Und dann bin ich mir nicht sicher, ob dieser Testeintrag ausreicht?
page.includeLibs.usermenu = fileadmin/misc/menu1.php
temp.splitmenu = HMENU
temp.splitmenu.special = userfunction
temp.splitmenu.special.userFunc = user_menuFunc->makeMenuArray
# ...
page = PAGE
page {
includeCSS {
file1 = fileadmin/misc/example.css
file1.media = all
file2 = fileadmin/misc/style.css
file2.media = all
}
10 = TEMPLATE
10.workOnSubpart = START
10.template = FILE
10.template.file = fileadmin/misc/template.htm
10.marks {
MENU < temp.tmenu
MENU2 < temp.splitmenu
# ...
}
}
<?php
class user_menuFunc {
function makeMenuArray($content,$conf) {
return array(array('title'=>'ABC','uid'=>'23'),array('title'=>'17','uid'=>'17'));
}
}
?>
Wäre super, wenn mir da jemand unter die Arme greifen könnte ...
Grüße
McGregor
Hi!
Da hab ich mal wieder die Antwort schneller selbst gefunden 😃
Folgendes TS:
temp.splitmenu2 = COA
temp.splitmenu2 {
5 = TEXT
5.value = <table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top">
10 = HMENU
10 {
special = userfunction
special.userFunc = user_menuFunc->makeMenuArray
special.userFunc.entryID = 30
begin = 0
maxItems = 5
1 = TMENU
1 {
wrap = <div class="menu-header">2-Zi.-App.</div>|
NO.allWrap = <div id="menu-zwei">|</div>
ACT = 1
ACT.allWrap = <div id="menu-zweiactive">|</div>
}
}
15 = TEXT
15.value = </td><td valign="top">
20 < .10
20.begin = 6
20.1.wrap = <div class="menu-header"> </div>|
25 = TEXT
25.value = </td><td valign="top">
30 < .10
30.begin = 11
30.1.wrap = <div class="menu-header"> </div>|
35 = TEXT
35.value = </td><td valign="top">
40 < .10
40.begin = 16
40.1.wrap = <div class="menu-header"> </div>|
45 = TEXT
45.value = </td><td valign="top">
50 < .10
50.begin = 21
50.1.wrap = <div class="menu-header"> </div>|
55 = TEXT
55.value = </td><td valign"top">
60 < .10
60.begin = 26
60.1.wrap = <div class="menu-header"> </div>|
65 = TEXT
65.value = </td></tr></table>
}
# ----- snip ------
page.10.marks.MENU < temp.splitmenu2
und hier mein PHP-File:
<?php
class user_menuFunc {
var $cObj;
function makeMenuArray($content,$conf) {
$GLOBALS["TSFE"]->set_no_cache();
$lConf = $conf["userFunc."];
unset($menu1);
$menu1 = $GLOBALS["TSFE"]->fe_user->getKey('ses', 'order'.$lConf['entryID']);
if (!is_array($menu1)) {
unset($menuArr);
$menuArr = array();
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','pages','hidden=0 AND deleted=0 AND pid = '.$lConf['entryID'],'','sorting','');
while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) $menuArr[] = $row;
// Jetzt neue Reihenfolge bestimmen ...
$start = rand(0,count($menuArr));
unset($neues_menu_array);
$neues_menu_array = array();
for ($i=$start; $i<count($menuArr); $i++) $neues_menu_array[] = $menuArr[$i];
// und jetzt noch den Anfang dran hängen
for ($i=0; $i<$start; $i++) $neues_menu_array[] = $menuArr[$i];
$GLOBALS["TSFE"]->fe_user->setKey('ses', 'order'.$lConf['entryID'], $neues_menu_array);
} else $neues_menu_array = $menu1;
return $neues_menu_array;
}
}
?>
Ich dachte nicht, dass ich im TS noch den normalen Code für die Menügenerierung reinpacken muss. Ist aber logisch...
Grüße
McGregor