我有一个问题,在一个TYPO3的一页(11.5.20)环境包含了许多子页面,这会过度扩展前端显示的HMENU
。一位同事的建议是隐藏所述菜单中的所有子页面,而将它们显示在嵌入页面本身的单独菜单中。这基本上意味着我们必须仅为一个特定菜单隐藏子页面。不是所有的,排除了后台隐藏子页面导航的可能性。
为了使这个功能不只是应用于单个静态定义的页面,我的想法是为具有此需求的页面注册一个单独的页面布局,并在Typoscript中配置HMENU
以忽略给定布局的子页面。我所要做的就是简单地返回一个空数组,如果页面布局适用的话。2我遇到了两个问题:
- 我定义的函数似乎没有被调用。我在下面的Typoscript片段中包含了这个脚本,但是即使故意在里面抛出一个异常,在TYPO3中也没有任何反馈,菜单照常显示所有页面。that method of inclusion可能已经过时了吗?官方TYPO3文档规定
USER
andUSER_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;
}
}
1条答案
按热度按时间bksxznpy1#
这基本上意味着我们必须只为一个特定的菜单隐藏子页面,而不是为所有的菜单隐藏子页面,从而排除了后台隐藏子页面以进行导航的可能性。
实际上,这就是您正在寻找的解决方案,但正好相反。将这些页面设置为
hide in menus
,然后使用includeNotInMenu
参数在所有菜单中仍然使用它们,除了您提到的那个。https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/ContentObjects/Hmenu/Index.html#includenotinmenu