Как включить JS на основе макета страницы TYPO3? - PullRequest
1 голос
/ 03 апреля 2019

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

Я попытался использовать если, как это:

page.includeJSFooter {
  file1 = myscript.js
  file1.if.isFalse.field = layout
  file1.if.isFalse.value = 103
  file1.if.isFalse.negate = 1
}

Iпопробовал несколько вариантов этого, но не могу заставить его работать?

Ответы [ 3 ]

4 голосов
/ 03 апреля 2019

Если вы используете макеты Backend, то приведенный ниже код поможет вам

[globalVar = TSFE:page|backend_layout =pagets__seitenleiste]
page.includeJSFooter {
 file1 = myscript.js
}
[end]

Если вы использовали макет внешнего интерфейса, то приведенный ниже код поможет вам

[globalVar = TSFE:page|layout =1]
page.includeJSFooter {
file1 = myscript.js
}
[end]

Дайте мне знать, если это не работаетдля вас я постараюсь предложить другой способ !!

3 голосов
/ 03 апреля 2019

Ваше состояние имеет некоторые проблемы:

file1.if.isFalse.field = layout

вы проверяете, не имеет ли поле значения (равенство логическому ложному как 0 или пустая строка)

file1.if.isFalse.value = 103

.isFalse не сравнивается ни с одним конкретным value

file1.if.isFalse.negate = 1

.negate должно произойти на один уровень выше, а отрицание .isFalse будет .isTrue


Вам нужно сравнить с равенством.
Это было бы как простое решение примерно так:

page.includeJSFooter {
    file1 = myscript.js
    file1.if.equals = 103
    file1.if.value.field = layout
}

если вы используете поле backend_layout, вы, вероятно, также используете поле backend_layout_next_level, которое может устанавливать значения для страниц ниже.
Тогда ваш TS будет выглядеть так:

page.includeJSFooter {
    file1 = myscript.js
    file1.if {
        equals {
            data = levelfield:-1,backend_layout_next_level,slide
            override.field = backend_layout
        }
        value = pagets__speciallayout
    } 
}

пытается получить макет из унаследованного поля backend_layout_next_level, но заданное значение в поле backend_layout имеет приоритет.

1 голос
/ 03 апреля 2019

Если вы используете FLUID для рендеринга страницы, вы также можете добавить ресурсы из шаблонов страниц, например, f.e. используя этот ViewHelper https://fluidtypo3.org/viewhelpers/vhs/master/Asset/ScriptViewHelper.html для ресурсов JavaScript.

Лично я думаю, что эта логика принадлежит шаблону, а не TypoScript, поэтому я всегда делаю это в своих шаблонах. Я использую пользовательский ViewHelper, хотя он добавляет ресурсы в pageRenderer точно так же, как TypoScript, так что к ним применяется вся логика сжатия, слияния и другая логика PageRenderer (в отличие от VHS viewHelper, который делает свое дело).

Если вы предпочитаете способ TypoScript, я бы пошел с условием if, предложенным Берндом Вилке

edit: к сожалению, условие if в примерах Bernds неверно, попробуйте

page.includeJSFooter {
    file1 = myscript.js
    file1.if.value.field = layout
    file1.if.equals = 103
}

и

page.includeJSFooter {
    file1 = myscript.js
    file1.if {
      value {
        data = levelfield:-1,backend_layout_next_level,slide
        override.field = backend_layout
      }
      equals = pagets__speciallayout
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...