[TYPO3] (enhanced) Split menu with variable number of items in half

Francois Suter fsuter at cobweb.ch
Wed Jun 27 21:52:17 CEST 2007


Hi all,

The following menu has been for a while an example of how to do a 2- 
column menu and I implemented it today at a client's. It works fine  
but I realised it has a small drawback: empty <a> tags are generated  
for all the links that are in the other half of the menu. This comes  
from the fact that the "if" condition is applied to the cObject of  
the stdWrap, rather than being applied to the stdWrap itself...  
(continued below)

> lib.splitmenu = COA
> lib.splitmenu {
>
>   10 = HMENU
>   10.special = directory
>   10.special.value = 1
>   10.1 = TMENU
>   10.1 {
>     wrap = <div>1st half of menu items<br>|</div>
>     NO {
>       stdWrap.cObject = COA
>       stdWrap.cObject {
>         10 = TEXT
>         10.field = title
>         if.value.data = register:count_HMENU_MENUOBJ
>         if.negate = 1
>         if.isLessThan.prioriCalc=1
>         if.isLessThan.cObject=TEXT
>         if.isLessThan.cObject.insertData=1
>         if.isLessThan.cObject.value = ({register:count_menuItems}+1)/2
>         wrap = |<br>
>       }
>     }
>     ACT < .NO
>     ACT = 1
>     ACT.stdWrap.cObject.10.wrap = <strong>|</strong>
>   }
>   20 < .10
>   20.1.wrap = <div>2nd half of menu items<br>|</div>
>   20.1.NO.stdWrap.cObject.if.negate >
> }

So I tried to move the "if" up to apply it directly to the stdWrap. I  
also applied the same condition to the allStdWrap so that empty wraps  
would not be generated. And this produces a perfectly clean HTML  
structure with no empty or unnecessary tags. So here's the code in  
case it can be of use to someone else.

lib.splitmenu = COA
lib.splitmenu {
	10 = HMENU
	10 {
		special = directory
		special.value = 1
		1 = TMENU
		1 {
			wrap = <div>1st half of menu items<br />|</div>
	        NO {
	            allStdWrap {
	                wrap = |<br />
	                if {
	                    value.data = register:count_HMENU_MENUOBJ
	                    negate = 1
	                    isLessThan {
	                        prioriCalc = 1
	                        cObject = TEXT
	                        cObject.insertData = 1
	                        cObject.value = ({register:count_menuItems}  
+ 1) / 2
	                    }
	                }
	            }
	            stdWrap.if < .allStdWrap.if
	        }
			ACT < .NO
			ACT = 1
			ACT.stdWrap.wrap = <strong>|</strong>
		}
	}
	20 < .10
	20.1.wrap = <div>2nd half of menu items<br>|</div>
	20.1.NO.stdWrap.if.negate >
	20.1.NO.allStdWrap.if.negate >
	20.1.ACT.stdWrap.if.negate >
	20.1.ACT.allStdWrap.if.negate >
}

Cheers

François Suter
Directeur technique
------------------------------------------------------------------------ 
-------------------------------------------------------------
Cobweb Development Sàrl
www.cobweb.ch
------------------------------------------------------------------------ 
-------------------------------------------------------------




More information about the TYPO3-english mailing list