Присвойте значение регистра ключу 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
...
}
Вот так это работает.