Typoscript - 简化传递参数到对象

时间:2015-02-09 09:32:23

标签: typo3 typoscript typo3-6.2.x

我在Typoscript中有以下对象,我想重复使用几次:

module.headedmenu = COA
module.headedmenu{
    10 = HMENU
    10{
        wrap = <nav><ul><li>|</li></ul></nav>

        special = list
        special.value = ###ROOTID###

        1 = TMENU
        1.NO.doNotLinkIt = 1
    }

    20 = HMENU
    20{

        wrap = <nav><ul>|</ul></nav>
        special = directory
        special.value = ###ROOTID###

        1 = TMENU
        1{
            #Do we really need this??
            expAll= 1

            NO = 1
            NO.wrapItemAndSub = <li class="first-level">|</li>

            ACT = 1
            ACT.wrapItemAndSub = <li class="first-level active">|</li>
        }
    }
}

这可以像这样重复使用:

10 < module.headedmenu
10.10.special.value = 3
10.20.special.value = 3

20 < module.headedmenu
20.10.special.value = 12
20.20.special.value = 12

有没有办法重构这个,所以我不需要输入多次root ID?常数不要削减它,因为我想多次使用它。我不想有一个巨大的常量列表。我想使用它,更像是一个可以传递参数的函数。

这可行吗?

1 个答案:

答案 0 :(得分:1)

您可以使用registers

# Query register where the root id is needed:
module.headedmenu {
    [...]
    special.value = {register:rootId}
    special.value.insertData = 1
    [...]
}

# Set register before rendering element, and
# restore it afterwards:
10 = COA
10 {
    10 = LOAD_REGISTER
    10 {
        rootId = 3
    }

    20 < module.headedmenu

    30 = RESTORE_REGISTER
}