[TYPO3] Can't include "not in menu" pages in path menu using includeNotInMenu property

Ricardo Scachetti Pereira ricardo at tdwg.org
Wed Jul 5 15:02:35 CEST 2006


    Hi all,

    For those struggling with the HMENU.includeNotInMenu property, and 
for future reference, here is what I found about property 
HMENU.includeNotInMenu.

    In method tslib_menu.start (file tslib/class.tslib_menu.php line 
210), there's this code below that handles the property 
HMENU.includeNotInMenu:

...
    if($this->conf['includeNotInMenu']) {
        $exclDoktypeArr = 
t3lib_div::trimExplode(',',$this->doktypeExcludeList,1);
        $exclDoktypeArr = 
t3lib_div::removeArrayEntryByValue($exclDoktypeArr,'5');
        $this->doktypeExcludeList = implode(',',$exclDoktypeArr);
    }
...

    What this code above does, to me, is to remove doktypes 5 from the 
list of excluded doktypes in menus if you set includeNotInMenu. 
Apparently, doktype 5 used to be not in menu pages. But I think this has 
changed and now it is coded into the class property nav_hide instead. 
Doktype now seems to show 1 for standard pages, 4 for shortcuts, and 
something else for advanced, etc.

    Then in method tslib_menu.filterMenuPages (same file, line 855), 
there is a series of IF statements that test whether a page should be 
included on the menu or not.

...
if (!t3lib_div::inList($this->doktypeExcludeList,$data['doktype']))    
{        // Page may not be 'not_in_menu' or 'Backend User Section'
    if (!$data['nav_hide'])    {    // Not hidden in navigation
        if (!t3lib_div::inArray($banUidArray,$uid))    {    // not in 
banned uid's
...

    The problem is that the 2nd IF statement will filter out the 
not-in-menu pages even if you set includeNotInMenu in your TS template.

    I really dirty fix (that seems to fix my problem) is this:

...
    if($this->conf['includeNotInMenu']) {
        $exclDoktypeArr = 
t3lib_div::trimExplode(',',$this->doktypeExcludeList,1);
        $exclDoktypeArr = 
t3lib_div::removeArrayEntryByValue($exclDoktypeArr,'5');
        $this->doktypeExcludeList = implode(',',$exclDoktypeArr);
        $this->includeNotInMenu = 1;   // <<<< FLAG ADDED HERE
    }
...
if (!t3lib_div::inList($this->doktypeExcludeList,$data['doktype']))    
{        // Page may not be 'not_in_menu' or 'Backend User Section'
    if ($this->includeNotInMenu || !$data['nav_hide'])    {    // Not 
hidden in navigation   // <<<<<< FLAG IS VERIFIED HERE
        if (!t3lib_div::inArray($banUidArray,$uid))    {    // not in 
banned uid's
...

    Note that you will still experience the same (or similar) problems 
if you use HMENU.special property with the following values (and the 
lines causing the problem):

1) HMENU.special = updated

Line 494: $extraWhere = ' AND 
pages.nav_hide=0'.$this->getDoktypeExcludeWhere();
// nav_hide is used in SQL statement directly to filter not-in-menu 
pages out.

2) HMENU.special = keywords

Line 549: $extraWhere = ' AND pages.uid!='.$value.' AND 
pages.nav_hide=0'.$this->getDoktypeExcludeWhere();
// same thing: nav_hide is used in SQL statement directly to filter 
not-in-menu pages out.

3) All menus:

Line 2704: if 
(!t3lib_div::inList($this->doktypeExcludeList,$data['doktype']) && 
!$data['nav_hide'] && !t3lib_div::inArray($banUidArray,$uid))    {    
    // Page may not be 'not_in_menu' or 'Backend User Section' + not in 
banned uid's

    Note that I can only certify that this applies to Typo3 v3.8.1.

    I hope this helps.

    Cheers,

Ricardo


Ricardo Scachetti Pereira wrote:
>     Hi all,
>
>     I'm trying to set the property includeNotInMenu to 1 (HMENU) to 
> generate a path menu (breadcrumbs). I want to display all subpages in 
> this menu, including those with "not in menu"  property set.
>
>     I tried it in many different ways, but I can't get the "not in menu" 
> pages to show up. Here's a snippet of my template:
>
> temp.path = HMENU
> # Setting the special property to "rootline" - this will produce a 
> "Path-menu"
> temp.path.special = rootline
> temp.path.includeNotInMenu = 1
> #temp.path.excludeDoktypes = 5,6  # I tried this line uncommented, with 
> different values and didn't work
>
> # First level menu-object, textual
> temp.path.1 = TMENU
> # Wrapping value for the whole menu:
> temp.path.1.wrap = Path: &nbsp; |
> temp.path.1 {
>     # Normal state properties appending " > " to all elements but the one.
>     # (See "optionSplit")
>     NO.allWrap = |&nbsp;&gt;&nbsp; |*||*| |
> }
>
>
>     The property includeNotInMenu is described in the documentation 
> (link below), but it doesn't show up on the TSRef browser from my Typo3 
> instance.
>
> http://typo3.org/documentation/document-library/references/doc_core_tsref/current/view/8/11/
>
>     I did search for solutions on the mailing list archives, Typo3.org 
> documentation and Google without luck. Google shows some references to 
> others having the same problems, but I couldn't find solutions.
>
>     I'm using Typo3 v3.8.1 and my templates follow the instructions on 
> Modern Template Building.
>
>     Any help is greatly appreciated.
>
>     Best regards,
>
> Ricardo
> _______________________________________________
> TYPO3-english mailing list
> TYPO3-english at lists.netfielders.de
> http://lists.netfielders.de/cgi-bin/mailman/listinfo/typo3-english
>
>   




More information about the TYPO3-english mailing list