Typo3 打字脚本菜单,对列表中包含的特定页面ID进行特殊处理
在打字菜单上把我的头发撕下来。我需要以下行为:Typo3 打字脚本菜单,对列表中包含的特定页面ID进行特殊处理,typo3,typoscript,Typo3,Typoscript,在打字菜单上把我的头发撕下来。我需要以下行为: “特殊”菜单项pageID的列表以常量{$special}维护 将呈现一个菜单,显示站点根目录的导航。如果pageID是“special”,那么它将获得一个特殊的div wrap,并且它的子页面列表嵌套在div wrap中。如果项目不是“特殊的”,那么它不会得到特殊的包装,也不会显示子页面。所有“特殊”项目都显示在页面列表的顶部 我尝试了几种方法: 方法1。一个接一个地给我们两张纸。第一个菜单仅显示{$SPECIAL},第二个菜单显示siteroo
MAIN_NAV.20 = HMENU
MAIN_NAV.20 {
special = directory
special.value = {$SITE_ROOT}
excludeUidList = {$RESTRICTED_ROOT}, {$HOME_SHORTCUT}
1 = TMENU
1{
NO{
# suppress standard menu output
doNotShowLink = 1
# build each menu item conditionally
stdWrap2.cObject = COA
stdWrap2.cObject{
#Standard
10 = TEXT
10{
# not in list of special pages?
if.value = {$NAV_CONTAINERS}
if.isInList.field = uid
if.negate = 1
field = nav_title//title
typolink.parameter.field = uid
wrap = <ul><li>|</li></ul>
}
#Special
20 = TEXT
20.wrap = <div class="SPECIAL"><ul><li><span>|</span>
20 {
if.value.field = uid
if.equals = {$SPECIAL}
field = nav_title//title
}
30 = TEXT
30.wrap = |</li></ul></div>
30 {
if.value.field = uid
if.equals = {$SPECIAL}
}
}
}
}
}
MAIN_NAV.20=humenu
主导航台20{
特殊=目录
special.value={$SITE\u ROOT}
excludeUidList={$RESTRICTED\u ROOT},{$HOME\u SHORTCUT}
1=t菜单
1{
没有{
#抑制标准菜单输出
doNotShowLink=1
#有条件地构建每个菜单项
stdWrap2.cObject=COA
stdWrap2.cObject{
#标准
10=文本
10{
#不在特殊页面列表中?
if.value={$NAV_容器}
if.isInList.field=uid
if.negate=1
字段=导航标题//标题
typlink.parameter.field=uid
包裹
}
#特别的
20=文本
20.wrap=- |
20 {
if.value.field=uid
if.equals={$SPECIAL}
字段=导航标题//标题
}
30=文本
30.wrap=|
30 {
if.value.field=uid
if.equals={$SPECIAL}
}
}
}
}
}
我不能硬编码(比如“特殊项1作为文本元素,然后特殊项1作为菜单的子项,然后特殊项1作为文本元素,然后特殊项2作为子项…”),因为{$Special}理论上可以是任意数量的页面
有人能提供任何建议来帮助您使用一种或其他方法吗?我认为用户Ila是对的,如果您使用special=list,您应该能够通过添加TMENUs来添加多个级别(子页面) 另一方面,我有一个类似的菜单,我想分享。它包含两种特殊的渲染情况-一种使用
覆盖.if
,另一种使用案例
temp.mainnav = HMENU
temp.mainnav {
wrap = <nav>|</nav>
entryLevel = 0
1 = TMENU
1 {
noBlur = 1
expAll = 1
wrap = <ul>|</ul>
NO {
wrapItemAndSub=<li class="p{page:uid}">|</li>
wrapItemAndSub.insertData = 1
}
}
2 = TMENU
2 {
noBlur = 1
expAll = 1
NO {
wrapItemAndSub=<li>|</li>
// http://labor.99grad.de/2013/07/10/typo3-hmenu-einen-menupunkt-anders-darstellen/
doNotLinkIt.override = 1
doNotLinkIt.override.if {
value = {$pidsDoNotLinkInMenu}
isInList.field = uid
}
stdWrap.wrap.override = <p class="unlinkedMenuItem">|</p>
stdWrap.wrap.override.if {
value = {$pidsDoNotLinkInMenu}
isInList.field = uid
}
}
}
3 = TMENU
3 {
noBlur = 1
expAll = 1
wrap = <ul class="level3">|</ul>
NO.wrapItemAndSub.cObject = CASE
NO.wrapItemAndSub.cObject {
//http://stackoverflow.com/questions/18899573/how-to-apply-a-different-wrap-in-a-tmenu-for-certain-items-only/18910302?noredirect=1#18910302
key.field = uid
// normal item
default = TEXT
default.value = <li class="level3">|</li>
// special item
{$somePid} = TEXT
{$somePid}.value = <li class="level3 foo">|</li>
{$somePid}.append < temp.sometemp
// some other special item
{$someOtherpid} = TEXT
{$someOtherpid}.value = <li class="level3 bar">|</li>
{$someOtherpid}.append < temp.someothertemp
}
}
}
temp.mainnav=humenu
临时主导航{
包裹=|
entryLevel=0
1=t菜单
1 {
noBlur=1
expAll=1
包裹=|
没有{
wrapItemAndSub=|
wrapItemAndSub.insertData=1
}
}
2=t菜单
2 {
noBlur=1
expAll=1
没有{
Wrapitemadsub=|
// http://labor.99grad.de/2013/07/10/typo3-hmenu-einen-menupunkt-anders-darstellen/
doNotLinkIt.override=1
doNotLinkIt.override.if{
值={$pidsDoNotLinkInMenu}
isInList.field=uid
}
stdWrap.wrap.override=|
stdWrap.wrap.override.if{
值={$pidsDoNotLinkInMenu}
isInList.field=uid
}
}
}
3=t菜单
3 {
noBlur=1
expAll=1
包裹=
NO.wrapItemAndSub.cObject=CASE
NO.wrapItemAndSub.cObject{
//http://stackoverflow.com/questions/18899573/how-to-apply-a-different-wrap-in-a-tmenu-for-certain-items-only/18910302?noredirect=1#18910302
key.field=uid
//正常项目
默认值=文本
default.value=
//特别项目
{$somePid}=TEXT
{$somePid}.value=|
{$somePid}.append|
{$someOtherpid}.append
我认为这两种方法都可以用来实现您的目标。为了在Humenu中呈现子页面,您需要根据第一级定义第二级。类似于“2=TMENU”