php TYPO 3-如何隐藏特定页面布局的特定菜单层次结构中的子页面?

kb5ga3dv  于 2023-02-07  发布在  PHP
关注(0)|答案(1)|浏览(191)

我有一个问题,在一个TYPO3的一页(11.5.20)环境包含了许多子页面,这会过度扩展前端显示的HMENU。一位同事的建议是隐藏所述菜单中的所有子页面,而将它们显示在嵌入页面本身的单独菜单中。这基本上意味着我们必须仅为一个特定菜单隐藏子页面。不是所有的,排除了后台隐藏子页面导航的可能性。
为了使这个功能不只是应用于单个静态定义的页面,我的想法是为具有此需求的页面注册一个单独的页面布局,并在Typoscript中配置HMENU以忽略给定布局的子页面。我所要做的就是简单地返回一个空数组,如果页面布局适用的话。2我遇到了两个问题:

  • 我定义的函数似乎没有被调用。我在下面的Typoscript片段中包含了这个脚本,但是即使故意在里面抛出一个异常,在TYPO3中也没有任何反馈,菜单照常显示所有页面。that method of inclusion可能已经过时了吗?官方TYPO3文档规定USER and USER_INT用于注册自定义函数,但我不太确定如何使它与itemArrayProcFunc一起工作。
  • 即使该函数起作用,我也不确定如何检索相应父页面的布局,或者是否有可能检索它。

我想我可能错过了一些关于Typoscript中自定义函数的要点(公平地说,TYPO3的文档并不完全清楚)。有人能给我一点提示吗?有没有更优雅的方法来隐藏特定页面的菜单?
lib.ts(片段):

includeLibs.user_menuItemArrayProcFunc = EXT:lraffb_intern/Classes/MenuItemArrayProcFunc.php
lib {   
    ...
    20 = HMENU
    20 {
        stdWrap {
            outerWrap = <nav class="navigation">|</nav>
        }
        entryLevel = 0
        
        1 = TMENU
        1 {
            wrap = <ul>|</ul>
            
            NO = 1
            NO {
                allWrap = <li>|
                wrapItemAndSub = |</li>
                itemArrayProcFunc = user_menuItemArrayProcFunc->process
            }
            
            ACT < .NO
            ACT {
                allWrap = <li class="act">|
            }
        }
        
        2 < .1
        3 < .2
        4 < .3
        5 < .4
    }
    ...
}

MenuItemArrayProcFunc.php

<?php

class MenuItemArrayProcFunc {
 
        public function process($menuArr, $conf) {
                if (PAGE_LAYOUT == 'pagets__left_no_subpages') // retrieve the page layout here somehow
                        return [];
 
                return $menuArr;
        }
}
bksxznpy

bksxznpy1#

这基本上意味着我们必须只为一个特定的菜单隐藏子页面,而不是为所有的菜单隐藏子页面,从而排除了后台隐藏子页面以进行导航的可能性。
实际上,这就是您正在寻找的解决方案,但正好相反。将这些页面设置为hide in menus,然后使用includeNotInMenu参数在所有菜单中仍然使用它们,除了您提到的那个。
https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/ContentObjects/Hmenu/Index.html#includenotinmenu

相关问题