为 TYPO3 CASE 键分配寄存器值

Assign register value to TYPO3 CASE key

我正在制作一些复杂的菜单,并希望使用 CASE(或类似的)来确定给定分支中子菜单的数量,以确定要使用的菜单样式。

代码:

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
    ...
    }
}

如何让 CASE 工作?我试过带牙套和不带牙套。

找到答案了。据我所知,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
   ...
}

这样就可以了。

您应该获得更多信息,了解如何访问打字错误中的字段、注册和其他数据。

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

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

如果您想访问 'current' record/data 的字段,您只需使用 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

已添加:

see the manual 的打字错误数据类型 getText 在这里您可以找到其他可以用来代替 register 的东西:

然后 manual entry for data 是函数 .stdWrap 的 属性 类型 getText.
此条目后跟 属性 field 说明,它是 data = field:
的快捷方式 (这解释了为什么 COA.data 会产生任何结果,因为对任何对象执行 .stdWrap.data 都会替换对象的内容。)

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

  • 当前记录的一个字段,可能因上下文而异:
  • 对于页面渲染是当前页面的记录(table pages),
  • 对于呈现内容元素,它是元素 (table tt_content),
  • 在 filesProcessor 中它是一个文件 (table sys_file_reference`),
  • CONTENTRECORDSsplitrenderObj中是您定义的选择。