Содержимое TypoScript, если нет результата, используйте другой запрос - PullRequest
0 голосов
/ 28 мая 2020

У меня есть простая опечатка, которая отлично работает, она выбирает следующую страницу из текущей

lib.refnext = COA
lib.refnext{
    stdWrap.required = 1
    10 = CONTENT
    10{
        table = pages
        select{
            pidInList.dataWrap = {field:pid}
            where.dataWrap = sorting<{field:sorting}
            begin = 0
            max = 1
            orderBy = sorting DESC
        }
        renderObj = COA
        renderObj{
            10 = TEXT
            10.typolink.parameter.field = uid
            10.typolink.ATagParams = class="next"
            10.value = nächste Referenz
        }
    }
}

с required = 1, перенос не отображается, если выбор не возвращает результата (текущая страница - это новейшая страница), теперь я хочу показать контент с другим оператором выбора. Я пробовал с

20 = CONTENT
20.if.isFalse < .10

, но выхода не было. выбор должен еще выглядеть так:

select{
    pidInList.dataWrap = {field:pid}
    begin = 0
    max = 1
    orderBy = sorting ASC
}

(первая страница, а не следующая от текущей), как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Как уже упоминалось в @Matmarbon, вам необходимо использовать cObject для вашего isFalse.

Другой вариант заполнения пустого свойства - это функция ifEmpty. Здесь вам также понадобится cObject (для определения замены), но вы должны быть быстрее, поскольку нет копии .10, которая требует дальнейшей оценки.
Возможно, вам также не нужно COA.

Таким образом, это может привести к структуре типа

lib.refnext = CONTENT
lib.refnext{
    required = 1
    table = pages
    select{
        pidInList.dataWrap = {field:pid}
        where.dataWrap = sorting<{field:sorting}
        begin = 0
        max = 1
        orderBy = sorting DESC
    }
    renderObj = TEXT
    renderObj{
        typolink.parameter.field = uid
        typolink.ATagParams = class="next"
        value = nächste Referenz
    }

    stdWrap.ifEmpty.cObject = CONTENT
    stdWrap.ifEmpty.cObject {

        // alternative content selection and rendering

    }
}

0 голосов
/ 28 мая 2020

Одна проблема, с которой вы столкнулись в своем вопросе, заключается в том, что 20.if.isFalse оценивается как строка, а не как объект содержимого. Итак, если вы сделаете 20.if.isFalse, то ваш оцененный TS будет выглядеть примерно так ( ЗАБОТА, СЛЕДУЮЩИЕ TS НЕ ДЕЛАЕТ СМЫСЛА! ):

20.if.isFalse = CONTENT
20.if.isFalse {
   table = pages
   [...]
}

И, конечно же, строка "CONTENT" никогда не оценивается как ложь. Кроме того, TS не имеет смысла, потому что isFalse не имеет свойства table, нет свойства select et c.

Но 20.if.isFalse имеет свойства stdWrap, так что вы можете просто сделать это как 20.if.isFalse.cObject < .10. Это должно сработать.

Затем он вычисляет это, что на самом деле делает имеет смысл:

20.if.isFalse.cObject = CONTENT
20.if.isFalse.cObject {
   table = pages
   [...]
}
...