что вы хотите, это поведение по умолчанию для меню TYPO3. Вам просто нужно установить правильную упаковку. Делаем обертку там, где она принадлежит:
temp.menu = HMENU
temp.menu {
1 = TMENU
1 {
expAll = 1
wrap = <ul>|</ul>
NO = 1
NO {
wrapItemAndSub = <li>|</li>
}
}
// as you have no specific wrapping all levels can be generated the same:
2 < .1
3 < .2
}
если вам нужны определенные обертки на каждом уровне, вы можете адаптировать их после копирования (в этом примере вы можете видеть, откуда происходит обертывание)
temp.menu = HMENU
temp.menu {
1 = TMENU
1 {
wrap = <ul class="level1">|</ul>
NO = 1
NO {
wrapItemAndSub = <li class="lev1">|</li>
}
}
2 < .1
2 {
wrap = <ul class="level2">|</ul>
NO.wrapItemAndSub = <li class="lev2">|</li>
}
3 < .2
3 {
wrap = <ul class="level3">|</ul>
NO.wrapItemAndSub = <li class="lev3">|</li>
}
}
.
РЕДАКТИРОВАТЬ: после выяснения проблемы:
работа с LOADREGISTER в меню может привести к путанице, поскольку пункты меню не создаются встроенными рекурсивными.
Если вы хотите повторить пункт меню, вы должны создать его на месте.
Поэтому вам нужно разделить чистую упаковку и использовать волшебное меню соуса.
temp.menu = HMENU
temp.menu {
1 = TMENU
1 {
wrap = <ul class="level1">|</ul>
NO = 1
NO.wrapItemAndSub = <li>|</li>
// only for menuitems which contains further pages:
IFSUB < .NO
IFSUB {
// beginning the part of the submenu
after.cObject = TEXT
after.cObject {
field = nav_title // title
wrap = <div class="dropdown-menu"><ul><li>|</li>
}
}
}
2 < .1
2 {
// no beginning in wrap needed as it is done at level 1
wrap = |</ul></div>
}
}
дальнейшие уровни требуют дополнительной обработки. например: 2.IFSUB >
и 3.wrap = <ul>|</ul>
Примечание: если вы хотите чистый HTML с отступами, вам нужно использовать .noTrimWrap
и многострочные значения в Typoscript.