[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"> 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"> 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