Typo3 根据第一级的不同,具有不同第二级的打字稿菜单
我正在尝试构建一个带有打字脚本的菜单,其中第二级菜单根据第一级菜单项的不同而有所不同-这是我迄今为止尝试过的,但它没有按预期工作:Typo3 根据第一级的不同,具有不同第二级的打字稿菜单,typo3,typoscript,typo3-8.x,Typo3,Typoscript,Typo3 8.x,我正在尝试构建一个带有打字脚本的菜单,其中第二级菜单根据第一级菜单项的不同而有所不同-这是我迄今为止尝试过的,但它没有按预期工作: lib.mainnav = HMENU lib.mainnav { wrap = <ul id="nv-main">|<li class="responav"><i class="fas fa-bars"></i></li></ul> 1 = TMENU 1 {
lib.mainnav = HMENU
lib.mainnav {
wrap = <ul id="nv-main">|<li class="responav"><i class="fas fa-bars"></i></li></ul>
1 = TMENU
1 {
expAll = 1
NO = 1
NO.wrapItemAndSub = <li>|</li>
NO.stdWrap.htmlSpecialChars = 1
CUR = 1
CUR.wrapItemAndSub = <li class="current">|</li>
CUR.stdWrap.htmlSpecialChars = 1
}
# von 1 (TMENU) kopieren
2 < .1
2 {
expAll = 1
wrap = <div class="nv-main-sub-bg"><div class="nv-main-sub-wrapper clearfix">|</div></div>
wrap.override = <div class="nv-main-sub-bg"><div class="nv-main-sub-wrapper indented clearfix">|</div></div>
wrap.override.if {
value = 6
equals.data = page:uid
}
stdWrap.cObject = COA
stdWrap.cObject {
20 = HMENU
20 {
special = directory
special.value.data = field:pid
1 = TMENU
1 {
wrap = <div class="nv-main-col-sub"><ul>|</ul></div>
NO = 1
NO.allWrap = <li>|</li>
NO.stdWrap.htmlSpecialChars = 1
NO.after.cObject = COA
NO.after.cObject {
wrap = <div class="nv-main-info-wrapper"><div class="nv-main-col-info">|</div></div>
# Text aus dem Feld subtitle oder title der Seiteneigenschaften auslesen
10 = TEXT
10 {
value.field = subtitle // title
stdWrap.wrap = <p>|</p>
}
# Bild aus Reiter Resourcen der Seiteneigenschaften auslesen (nur bei Page-UID 4)
20 = FILES
20 {
if.value.field = pid
if.equals = 4
references {
table = pages
# Seiten-ID
uid.dataWrap= {field:uid}
fieldName = media
}
renderObj = IMAGE
renderObj {
file.width = 290c
file.height = 200c
file.import.data = file:current:uid
file.crop.data = file:current:crop
file.treatIdAsReference = 1
altText.data = file:current:title
##params = class="img-responsive"
wrap = |
}
}
# Text aus dem Feld "abstract" auslesen (nur bei Page-UID 6)
30 = TEXT
30 {
if.equals.field = pid
if.value = 6
value.field = abstract
stdWrap.wrap = <p class="b-sub">|</p>
}
}
CUR < .NO
CUR.allWrap = <li class="current">|</li>
}
}
}
}
}
HTML结构:
<ul id="nv-main">
<li>
<a href="">Item 1</a>
<div class="nv-main-sub-bg">
<div class="nv-main-sub-wrapper clearfix">
<div class="nv-main-col-sub">
<ul>
<li>
<a href="">Subitem 1 ** with text and picture **</a>
<div class="nv-main-info-wrapper">
<div class="nv-main-col-info">
<p>XXX</p> <!— from title/subtitle —>
<img src=„XXX“ border="0"> <!— from Resources —>
</div>
</div>
</li>
<li> … </li>
<li> … </li>
<li> … </li>
…
</ul>
</div>
</div>
</div>
</li>
<li> … </li>
<li>
<a href="">Item 3</a>
<div class="nv-main-sub-bg">
<div class="nv-main-sub-wrapper **indented** clearfix">
<div class="nv-main-col-sub">
<ul>
<li>
<a href="">Subitem 1 ** only with text **</a>
<div class="nv-main-info-wrapper">
<div class="nv-main-col-info">
<p class="b-head">XXX</p> <!— from title/subtitle —>
<p class="b-sub">XXX</p> <!— from abstract —>
</div>
</div>
</li>
<li> … </li>
<li> … </li>
<li> … </li>
…
</ul>
</div>
</div>
</div>
</li>
<li> … </li>
<li> … </li>
</ul>
-
-
XXX
…
-
-
XXX
XXX
…
我最近也遇到了类似的问题
第二级和第三级导航必须取决于第一级的选定项目
是否需要将第二个leven嵌套到活动项中
<ul class="first-level">
<li>item 1</li>
<li>item 2
<ul class="second-level">
<li>item 3</li>
</li>
</ul>
- 项目1
- 项目2
- 项目3
或者你能处理这样的结构吗
<ul class="first-level">
<li>item 1</li>
<li>item 2</li>
</ul>
<ul class="second-level">
<li>item 3</li>
</ul>
- 项目1
- 项目2
- 项目3
通常处理菜单中的“位置”是选项拆分的任务,但这需要完全重写第二级,因为它必须放在第一级项目的“之后”部分
但是,由于子菜单的行为实际上是由它所属的父页面决定的,而不仅仅是由该父页面在菜单的第一级中所处的位置决定的,因此您应该选择特定的PID值,而不是位置
为此,您可以使用“if”或“cObject”大小写,以便根据其项的pid值更改第二级。一种解决方案是呈现第二级的所有信息,并通过CSS决定将显示哪些部分(取决于第一级上由一级页面的属性设置的匹配类) 另一种方法是(正如Joey提到的):根据当前页面的
pid
构建.after
对象。您有一个页面列表,其中包含“仅使用文本”的特殊呈现,或者(更复杂)您使用pid
访问指示此特殊呈现的一级页面的属性
带有页面uid
s列表的简单解决方案可以是:
2.after.cObject = CASE
2.after.cObject {
key.field = pid
default = COA
default {
// rendering of **with text and picture**
}
// uid of level1 page
123 = COA
123 {
// rendering of **only with text**
}
// alternative level1 page with this rendering:
234 < .123
}
谢谢你的回答-我需要像你的第一个例子一样嵌套它。但是菜单本身运行良好-仅在第二级的不同内容中我有一些问题…..请提供更多信息:键入3版本、您的页面树、预期的HTML标记谢谢您的帮助!:-)虽然我不是打字本方面的专家,但请您解释一下,在我的打字本中,您的代码示例应该放在哪里?第一个代码(
2.after.cObject
)将取代您的定义(lib.mainnav.2.after.cObject=COA
),第二个将保留您给定的对象,并将.if
添加到lib.mainnav.2.after.cObject.20.1.NO.after.cObject.20
。非常感谢!!使用第一个代码,它现在可以工作了。:-)但是,仍然存在一个问题:根据pid,我还需要另一个包装-我已经用wrap.override尝试过了-但它不起作用(请参见2.wrap=|
)。你能给我一个提示吗?我假设错误的上下文为equals.data=page:uid
从当前页面访问uid。只需使用equals.field=uid
即可使用当前menuItem
的uid。嗨,伯恩德,我没有这样做。但是由于我只需要向wrap添加一个CSS类,所以现在我用jQuery解决了这个问题。我刚刚将PID用作CSS-ID,现在它可以工作了!:-)stdWrap.dataWrap=|
再次感谢您的帮助!
2.after.cObject = CASE
2.after.cObject {
key.field = pid
default = COA
default {
// rendering of **with text and picture**
}
// uid of level1 page
123 = COA
123 {
// rendering of **only with text**
}
// alternative level1 page with this rendering:
234 < .123
}
NO.after.cObject.20.if {
isInList.field = pid
// store pages uids in constant like: 1,2,34,50,87
value = {$specialPagesUidsList}
negate = 1
}