Присвойте значение регистра ключу TYPO3 CASE

Я делаю несколько сложных меню и хотел бы использовать 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 работать? Я пробовала с брекетами и без них.

2 ответа

Решение

Вы должны получить больше информации о том, как получить доступ к полям, регистрам и другим данным в опечатке.

если у вас есть свойство, вы в большинстве случаев можете изменить способ получения другой информации, кроме постоянного текста.

В вашем примере это 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

ДОБАВЛЕНО:

см. руководство по типу данных typoscriptgetText где вы можете найти что еще можно использовать вместо register:

затем ручной ввод дляdata что является свойством функции .stdWrap и типа getText.
За этой записью следует свойствоfield заявляя, что это ярлык для data = field:
(Это объясняет, почему ваш COA с .data приводит к чему угодно, так как .stdWrap.data на любом объекте заменит содержимое объекта.)

Быть в курсе, что field (либо как собственность, либо как ключ getText) выберем

  • поле текущей записи, которое может варьироваться в зависимости от контекста:
  • для рендеринга страницы это запись текущей страницы (таблица pages),
  • для рендеринга элемента содержимого это элемент (таблица tt_content),
  • внутри filesProcessor это файл (таблица sys_file_reference`),
  • в renderObj из CONTENT, RECORDS, или split это выбор, который вы определяете.

Нашел ответ. Насколько я могу судить,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
   ...
}

Вот так это работает.

Другие вопросы по тегам