在条件中使用打字稿变量

Posted

技术标签:

【中文标题】在条件中使用打字稿变量【英文标题】:use typoscript variable in condition 【发布时间】:2016-09-15 04:33:12 【问题描述】:

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

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

my_var = 10

我可以在打字稿中创建一个条件来检查 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 页呈现“这是第 1 页”,而为任何其他页面呈现“这是任何其他页面”。但是,虽然第 1 页正确呈现,但其他页面并非如此。它们被渲染为“不应显示此文本”。

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

【问题讨论】:

找到解决方案了吗? @Andras Otto 不,但我最后做了一个解决方法。遗憾的是,您的解决方案没有奏效。在我的例子中,起始页应该被渲染得非常特别,但所有子页面都应该使用布局正常渲染。但是由于子页面继承了父母的错字脚本,我虽然需要一些条件。但由于这不起作用,我已将起始页面移动到子页面并将根页面作为指向它的链接。那行得通。 酷!重要的是要为解决方案的未来提供提示,谢谢分享:) 【参考方案1】:

编辑: 对于第一个用例: 使用 TypoScript“文字”是可能的。请参阅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]

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

【讨论】:

感谢您的回答。我在使用您的方法时遇到问题。我已经更新了我的测试代码。 我总是编辑我的答案。我没有看到您正在尝试在设置中设置常量,这就是问题所在。我现在在我的一个项目上测试了我的解决方案,它正在工作。只需要分离逻辑:在constants.ts中设置变量(constant),在setup.ts中使用渲染逻辑 @VanCoding 与您的用例有关:您是否在检测具有该条件的页面类型?因为,后端布局可以很好地处理这个问题。参见例如wiki.wowa-webdesign.de/typo3/backend-layout-typo3-75 很遗憾这个解决方案对于 TYPO3 版本 10 已经过时了 @Urs 链接已更改。你有没有提到这个:wiki.wwagner.info/typo3-snippets/…?

以上是关于在条件中使用打字稿变量的主要内容,如果未能解决你的问题,请参考以下文章

打字稿中变量之间的区别

如何在打字稿中正确编写有条件的 promise.resolve?

如何在打字稿中访问嵌套条件类型

打字稿:“关注”条件类型

打字稿 - 条件要求

打字稿'条件'类型