Количество детей в меню TYPOSCRIPT

Мне интересно, есть ли в TYPOSCRIPT способ подсчитать количество детей в меню.

Вывод должен быть примерно таким:

<ul class="ebene1" data-elements="4">
    <li><a href="element1">Element 1</a></li>
    <li><a href="element1">Element 2</a></li>
    <li><a href="element1">Element 2</a></li>
    <li><a href="element1">Element 2</a></li>
</ul> 

Мой код выглядит так:

script.NAV = HMENU
script.NAV {
    special = directory
    special.value = 6

    1 = TMENU
    1 {
        expAll = 1
        noBlur = 1

        wrap = <ul class="menu main" id="nav-main">|</ul>

        NO = 1
        NO.wrapItemAndSub   = <li class="first element1">|</li> |*| <li class="element1">|</li> |*| <li class="last element1">|</li>

        CUR = 1
        CUR.wrapItemAndSub  = <li class="first element1 current">|</li> |*| <li class="element1 current">|</li> |*| <li class="last element1 current">|</li>
        ...

Спасибо, любая помощь очень ценится.


person lufi    schedule 04.02.2016    source источник
comment
Просто любопытно. Каково требование этого? Это для какого-то Javascript или для других целей?   -  person biesior    schedule 06.02.2016
comment
Привет, нет, но тем временем я решил это с помощью javascript. :) Мне это нужно из-за макета таблицы, и я хотел определить ширину дочерних элементов в зависимости от количества элементов. Так, например, если есть 5 элементов, каждый имеет ширину 20%.   -  person lufi    schedule 06.02.2016


Ответы (3)


На самом деле, хотя это можно сделать, как показал @Marcus (я считаю, что фрагмент работает, не проверял), это, вероятно, более быстрый подход к нам JavaScript для этого; так же легко, как:

<ul class="ebene1">
    <li><a href="element-1">Element 1</a></li>
    <li><a href="element-2">Element 2</a></li>
    <li><a href="element-3">Element 3</a></li>
    <li><a href="element-x">Element X</a></li>
</ul>

<script>$('.ebene1').attr('data-elements', $('.menu > li').length);</script>

И CSS как:

.ebene1[data-elements="4"] {
    background-color: yellow;
}

С другой стороны...

Если у вас есть динамическое меню с неизвестным количеством элементов, вместо добавления множества объявлений CSS, например,

.ebene1[data-elements="3"] li {width: 33.333%;}
.ebene1[data-elements="4"] li {width: 25%;}
.ebene1[data-elements="5"] li {width: 20%;}

Избегайте добавления атрибута data- через JS и просто измените width, рассчитав правильное значение:

$('.ebene1 > li').css({width: 100 / $('.ebene1 > li').length + '%'});
person biesior    schedule 07.02.2016
comment
Это именно то, что я сделал. Спасибо. - person lufi; 08.02.2016
comment
np ;) в любом случае небольшой совет: в следующий раз пишите не только чего вы хотите добиться в коде, но и зачем вам это нужно, таким образом кто-то может предложить вам другое/лучшее/более короткое решение прямо из коробки :) Не только в TYPO3, конечно ;) - person biesior; 08.02.2016

Используйте регистр {register:count_MENUOBJ}, как это должно решить вашу проблему.

1 = TMENU
1 {
    NO = 1
    NO {
        wrapItemAndSub.insertData = 1
        wrapItemAndSub = <li class="element-{register:count_MENUOBJ}">|</li>
    }
}
person Dirk Jüttner    schedule 11.10.2017

Вам нужна функция stdWrap numrows. Там вы можете добавить любую таблицу вместе с оператором select. Вот пример:

lib.countmenu = COA
lib.countmenu {
  10 = HMENU
  10.1 = TMENU
  10.1 {
    wrap = <ul>|</ul>
    NO {
      stdWrap.cObject = COA
      stdWrap.cObject {
        30 = TEXT
        30.numRows.table = pages
        30.numRows.select.pidInList.field = uid
        30.numRows.select.where = nav_hide!=1 AND doktype!=5 AND doktype!=6
        30.dataWrap = {field:title} [|]
      }
      wrapItemAndSub = <li>|</li>
    }
  }
}
person Marcus Schwemer    schedule 04.02.2016