在TYPOSCRIPT菜单中统计儿童

时间:2016-02-04 22:45:08

标签: typo3 typoscript typo3-7.6.x

我想知道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>
        ...

谢谢,非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您需要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>
    }
  }
}

答案 1 :(得分:1)

实际上虽然可以像@Marcus那样完成(我相信代码片段有效,但没有检查),对我们来说这可能是更快的方法;一样简单:

<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%;}

避免通过JS添加data-属性,只需通过计算正确值来更改width

$('.ebene1 > li').css({width: 100 / $('.ebene1 > li').length + '%'});

答案 2 :(得分:1)

使用寄存器{register:count_MENUOBJ}这样可以解决您的问题。

1 = TMENU
1 {
    NO = 1
    NO {
        wrapItemAndSub.insertData = 1
        wrapItemAndSub = <li class="element-{register:count_MENUOBJ}">|</li>
    }
}