Zum Inhalt springen

userfunction bei Menü

Erstellt am 28. Mai 2008 · 1 Antwort · letzte Antwort am 30. Mai 2008

Tags: Frage

McGregor ·

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

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">&nbsp;</div>|
 25 = TEXT
 25.value = </td><td valign="top">
 30 < .10
 30.begin = 11
 30.1.wrap = <div class="menu-header">&nbsp;</div>|
 35 = TEXT
 35.value = </td><td valign="top">
 40 < .10
 40.begin = 16
 40.1.wrap = <div class="menu-header">&nbsp;</div>|
 45 = TEXT
 45.value = </td><td valign="top">
 50 < .10
 50.begin = 21
 50.1.wrap = <div class="menu-header">&nbsp;</div>|
 55 = TEXT
 55.value = </td><td valign"top">
 60 < .10
 60.begin = 26
 60.1.wrap = <div class="menu-header">&nbsp;</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