Присвойте значение регистра ключу TYPO3 CASE - PullRequest
0 голосов
/ 31 марта 2020

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

1 голос
/ 01 апреля 2020

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

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

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

ДОБАВЛЕНО:

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

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

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

  • поле текущей записи, которое может варьироваться в зависимости от контекста:
  • для отображения страницы это запись текущей страницы (таблица pages),
  • для рендеринга элемента содержимого это элемент (таблица *) 1066 *),
  • внутри файлового процессора это файл (таблица sys_file _reference`),
  • в renderObj из CONTENT, RECORDS или split это выбор, который вы определяете.
0 голосов
/ 31 марта 2020

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

Таким образом, он работает.

...