在条件中使用typoscript变量

时间:2016-05-18 15:19:49

标签: typo3 typoscript typo3-7.6.x

是否可以在TypoScript条件下使用TypoScript中定义的变量?

例如,如果我定义一个这样的变量:

my_var = 10

我可以在typoscript中创建一个检查my_var是否等于10的条件吗? 我想象这样的事情:

my_var = 10
[my_var = 10]
# do something
[else]
# do something else
[end]

我需要这个的原因是缺乏嵌套条件。如果我要求的是可能的,我可以做这样的事情来克服这个限制:

[globalVar=TSFE:id=1]
# render special layout for page 1
[else]
normal_layout = 1
[end]
[normal_layout = 1] && [globalVar=TSFE:page|layout=1]
# render normal layout 1
[end]
[normal_layout = 1] && [globalVar=TSFE:page|layout=2]
# render normal layout 2
[end]

另一个用例是检查变量是否存在,例如,如果已经定义了page。例如:

[globalVar=TSFE:id=1]
    page = PAGE
    page.10 = TEXT
    page.10.value = hello page 1!
[end]
[!page]
    page = PAGE
    page.10 = TEXT
    page.10.value = hello world!
[end]

我很惊讶文档已经没有回答:S

修改

我已尝试过Andreas Ottos的解决方案,但它似乎仍无效。这是我的示例代码:

lib.content = TEXT
lib.content.value = this text should not get displayed

[globalVar=TSFE:id=1] 
lib.content = TEXT
lib.content.value = this is page 1
[else]
normal_layout = 1
[end]

[globalVar = LIT:1 = {$normal_layout}]
lib.content = TEXT
lib.content.value = this is any other page
[end]
page = PAGE
page.10 < lib.content

从理论上讲,这应该会导致这是第1页&#39;对于第1页和&#39;这是任何其他页面&#39;对于任何其他页面。但是,当第1页被正确呈现时,其他页面的情况并非如此。他们会使用&#39;这个文字不应该显示&#39;。

有什么想法吗?我使用的是7.6版本。这可能是问题吗?

1 个答案:

答案 0 :(得分:2)

编辑:对于第一个UseCase: 使用TypoScript&#34; literal&#34;是可能的。请参阅doc here中的一个小提示。 而且你必须将常量与逻辑分开。

所以在常量中你必须写:

[globalVar=TSFE:id=1]
normal_layout = 0
[else]
normal_layout = 1
[end]

在设置部分,您可以使用此变量:

[globalVar = LIT:0 = {$normal_layout}]
    # render special layout for page 1
[end]

[globalVar = LIT:1 = {$normal_layout}] && [globalVar=TSFE:page|layout=1]
# render normal layout 1
[end]

[globalVar = LIT:1 = {$normal_layout}] && [globalVar=TSFE:page|layout=2]
# render normal layout 2
[end]

你的第二个用例并不是很清楚,但我建议使用在特定情况下被覆盖的页面基本定义。