0

Am making some complex menus and would like to use CASE (or similar) to determine the number of submenus in a given branch in order to determine the style of menu to use.

Code:

5 = HMENU
5 {
    entryLevel = -1

    1 = TMENU
    1 {
        expAll = 1

        NO = 1
        NO {
           ...
        }

        IFSUB = 1
        IFSUB {

            10 = CASE
            10 {
                key.data = {register:count_menuItems}

                1 = COA
                1 {
                    data = {field:title}
                    data.insertData = 1
                }

                2 = COA
                2 {
                    data = {field:title}
                    data.insertData = 1
                }

                default = COA
                default {
                    data = {field:title}
                    data.insertData = 1
                }
            }

            wrapItemAndSub = |
        }
    }

    2 = TMENU
    2 {
        maxItems = 2
        expAll = 1
    ...
    }
}

How can I get CASE to work? I've tried it with and without the braces.

4

2 回答 2

1

您应该获得更多关于如何在打字稿中访问字段、注册和其他数据的信息。

如果您有一个属性,您通常可以修改获取其他信息的方式而不是常量文本。

在您的示例中,它是key常量没有意义的属性。

如果您想访问您刚刚使用的“当前”记录/数据的字段key.field = fieldname

如果是其他数据,您可以修改它以key.data = register:registername
访问字段key.data = field:fieldname

如果您希望将这些数据连接到其他信息,您可以使用包装:

key.data = register:registername
key.wrap = prefix- | -suffix

注意:包裹的部分在连接之前被修剪

另一种方法是内联表示法,您甚至可以使用多个值:

key = {register:registername}-with-{field:fieldname}
key.insertData = 1

在这里你有两个替代品。每个都必须用大括号包裹,{}你需要告诉 TYPO3 有替换要做:insertData = 1


特例TEXT对象:

10 = TEXT
10.value = constant Text

20 = TEXT
20.field = fieldname

30 = TEXT
30.data = register:registername

40 = TEXT
40.value = register is '{register:registername}' and field is '{field:fieldname}'
40.insertData = 1

添加:

请参阅打字稿数据类型的手册getText,您可以在其中找到可以使用的其他内容,而不是register

然后是作为函数和类型属性的手动输入data。 此条目后跟属性说明,它是一个快捷方式 (这解释了为什么你的with会产生任何结果,因为对任何对象执行 a 将替换对象的内容。).stdWrapgetText
fielddata = field:
COA.data.stdWrap.data

请注意field(作为属性或作为 的键getText)将选择

  • 当前记录的字段,可能因上下文而异:
  • 对于页面渲染,它是当前页面(表pages)的记录,
  • 对于呈现内容元素,它是元素(表tt_content),
  • 在 filesProcessor 中它是一个文件(表sys_file_reference`),
  • renderObjof CONTENT,中RECORDS,或者split它是您定义的选择。
于 2020-04-01T06:58:15.027 回答
0

找到了答案。据我所知,CASE可以继续工作stdwrap.cObjects,所以代码

10 = CASE
10 {
   key.data = {register:count_menuItems}
   ...
}

应该

stdWrap.cObject  = CASE
stdWrap.cObject {
   key.data = register:count_menuItems
   if.isTrue.data = register:count_menuItems
   ...
}

这样就可以了。

于 2020-03-31T18:29:50.250 回答