[TYPO3] How to create an updated menu?

Peter Klein peter at umloud.dk
Mon Jun 11 15:35:02 CEST 2007


"Andreas Balzer" <typo3 at andreas-balzer.de> skrev i en meddelelse 
news:mailman.1.1181563887.22534.typo3-english at lists.netfielders.de...
> Peter Klein schrieb:
>> "Andreas Balzer" <typo3 at andreas-balzer.de> skrev i en meddelelse 
>> news:mailman.1.1181540209.12155.typo3-english at lists.netfielders.de...
>>> Peter Klein schrieb:
>>>> Hi Andreas.
>>>>
>>>> On the page you have set to "hidden", enable the checkbox " Include 
>>>> subpages:". That should get rid of the subpages of hidden pages in your 
>>>> menu.
>>
>>> Hi!
>>> Well that would be an idea, but then non-BE users wouldn't be able to 
>>> access that page. Isn't it possible to tell TYPO3 to look in the page 
>>> levels whether one page is hidden?
>>>
>>
>> The easiest way would be to write a small UserFunc that checks the 
>> current menuitem and it's parent item, all the way to the rootline, to 
>> see if it has "hidden" set. And if it's set, you skip generating that 
>> menuitem.
>>
> Hi :)
> Any chance to find such a UserFunc somewhere in the internet? ;)
>
> Andreas

Hi Andreas. I haven't seen any, but it can't be that hard to make.. ;)

Something like this:

Create a file in your fileadmin folder, and name it "menuFunc.inc"
Then fill it with this content:

-- cut --
<?php

class user_menuFunc {

 function hideHiddenSubs($menuArr ,$conf) {
  $new_menuArr = array();
  while (list($k,$v) = each($menuArr)) {
   if (!$this->gethidden($v['uid'])) {
    $new_menuArr[] = $v;
   }
  }
  return $new_menuArr;
 }

 function gethidden($uid) {
  $hiddenFlag = 0;
  while ($uid!=0) {
   $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*','pages','uid='.$uid);
   $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
   $uid = $row['uid'];
   $hiddenFlag += $row['hidden'];
  }
  return ($hiddenFlag>0);
 }
}

?>
-- cut --

Then in your SETUP field, insert this line:

-- cut --
page.includeLibs.menustuff = fileadmin/menuFunc.inc
-- cut --

And in your TMENU object, insert this before the NO part:

-- cut --
itemArrayProcFunc = user_menuFunc->hideHiddenSubs
-- cut --

This will check if the current menuitem or it's parent or (parents parent 
etc.) pages is hidden, and exclude that from the menu.
Only problem is that if you set "maxItems =5" then $menuArr only contains 5 
pages, and if 1 of these is behind a hidden page, only 4 pages will be 
shown.

--
Peter Klein / Umloud Untd




More information about the TYPO3-english mailing list