[TYPO3] How to create an updated menu?

Andreas Balzer typo3 at andreas-balzer.de
Tue Jun 12 18:21:59 CEST 2007


Andreas Balzer schrieb:
> Peter Klein schrieb:
>> "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
>>
>>
> I have a few questions about implementing it..
> Is the word menustuff irrelevant? Can I write something like 
> pages.includeLibs.sortouthiddenpages?
> 
> I have named the file sortouthiddenpages.inc. Do I have to change 
> something in the other codes?
> 
> Is the following implementation correct?
> temp.new = COA
> temp.new.10 = HTML
> temp.new.10.value = <div class="SpalteBorderKastenBox"><div 
> class="SpalteBorderKastenHeadline">&nbsp; &nbsp; Was gibt´s 
> Neues?</div><div class="SpalteBorderKastenContent">
> temp.new.20 = HMENU
> temp.new.20.special = updated
> temp.new.20.special.value = 1
> temp.new.20.special {
> #mode = lastUpdated
> mode = tstamp
> depth = 9999999999
> maxAge = 3600*24*7*8
> limit = 5
> }
> temp.new.20.entryLevel = 0
> temp.new.20.1 = TMENU
> temp.new.20.1 {
> expAll = 1
> minItems = 1
> maxItems = 5
> itemArrayProcFunc = user_menuFunc->hideHiddenSubs
> NO {
> linkWrap = <b> | </b>
> allWrap =  | <BR>
> }
> }
> temp.new.30 = HTML
> temp.new.30.value = </div></div>
> 
> #temp.new = COA
> #temp.new {
> #  10 = LOAD_REGISTER
> #  10{
> #    lvl1uids.cObject = CONTENT
> #    lvl1uids.cObject {
> #      table=pages
> #      select.pidInList.data = leveluid:0
> #      select.addWhere = not hidden = 1
> #      renderObj = TEXT
> #      renderObj.field = uid
> #      renderObj.wrap = |,
> #      renderObj.stdWrap.crop = 16 | ...
> #    }
> #    lvl2uids < .lvl1uids
> #    lvl2uids.cObject.select.pidInList.data= register:lvl1uids
> #    lvl3uids < .lvl1uids
> #    lvl3uids.cObject.select.pidInList.data= register:lvl2uids
> #    lvl4uids < .lvl1uids
> #    lvl4uids.cObject.select.pidInList.data= register:lvl3uids
> #    lvl5uids < .lvl1uids
> #
> #   lvl5uids.cObject.select.pidInList.data= register:lvl4uids
> #    alluids.cObject = COA
> #    alluids.cObject {
> #      10=TEXT
> #      10.data = register:lvl1uids
> #      20=TEXT
> #      20.data = register:lvl2uids
> #      30=TEXT
> #      30.data = register:lvl3uids
> #      40=TEXT
> #      40.data = register:lvl4uids
> #      50=TEXT
> #      50.data = register:lvl5uids
> #      60=TEXT
> #      60.data = leveluid:0
> #    }
> 
>   }
>   20 = CONTENT
>   20 {
>     table = pages
>     select {
>       pidInList.data = register:alluids
>       orderBy = tstamp DESC
>       max = 5
>     }
>     renderObj = COA
>     renderObj {
>       10 = TEXT
>       10.field = title
>       10.typolink.parameter.field=uid
>       10.wrap = <li>|</li>
>       10.crop = 16 | ...
>     }
>   }
>   wrap=<div class="SpalteBorderKastenBox"><div 
> class="SpalteBorderKastenHeadline">&nbsp; &nbsp; Was gibt´s 
> Neues?</div><div class="SpalteBorderKastenContent"><ul 
> class="lastchangesmenu">|</ul></div></div>
> }
> 
> 
> If it's correct then it doesn't work.. :-/
> 
> Andreas
Hi! I got TYPO3 executing it. Well.. The loading process of a page 
doesn't finish and the server gets quite a big load. Is there any way to 
do this with less cpu usage?

Andreas


More information about the TYPO3-english mailing list