Typo3:如果条件在typoscript中检查多个字段是否为空

时间:2015-09-17 14:24:02

标签: typo3 typoscript typo3-6.2.x

我想从 tt_content 表中呈现一个页面,结果如下所示。伪代码如下:

--include '*/' --prune-empty-dirs --include 50/200/file2.txt

我的typoscript结构如下:

if (header_link != "" && image != "") {
    // build content with header_link and image
    html = <div><a href="{header_link}"><img src="{img}" /></a></div>
} else {
    // build content without those fields
    html = <div><h1>{header}</h1></div>
}

我不知道为什么Typo3的官方网站上没有可用的示例代码,他们只有描述。因此,我再次依赖stackoverflow-ies。 :)

2 个答案:

答案 0 :(得分:1)

请记住,TypoScript只是一个配置表不是编程语言。更重要的是,你不能在任何对象中放置条件,因为要求所有条件必须在顶层解决。幸运的是,您至少有两个解决方法,您可以创建自己的ContentElements让我们将它命名为MySepcialHeaderMySpecialHeaderWithImg,这样您可以在条件符号的情况下将其中一个置于文本CE之前。怎么做到这一点?

GridElements extension

是非常有用的工具,您可以在不触及任何单行PHP的情况下创建自己的类似CE的结构,所有这些都在Db记录( CE后端布局)和相应的TypoScript中完成。它可以与TemplaVoilà的FCE进行比较,更多可以在文档herehere中进行比较。

拥有真实的 CType

您也可以创建自己的CType,即使用Extension Builder它更有趣,但是当您在Fluid视图上使用PHP时,它为您提供了无限的可能性,如果您创建一个扩展,这就足够了,然后你可以在其中添加无限数量的插件/ CType。

您可以在other answer中找到有关此技术的更多信息。

答案 1 :(得分:0)

这个TypoScript模板适用于TYPO3 CMS 6.2.17服务器。

page.30 = CONTENT
page.30 {
    table = tt_content
    select {
        orderBy = sorting
        where = colPos = 0
    }
    renderObj = COA 
    renderObj {
        wrap = <div>|</div>
        10 = COA
        10.10 = TEXT
        10.10.if.isTrue.field = header_link
        10.10.if.isFalse.field = image
        10.10 {
            stdWrap.data = header_link
            stdWrap.typolink {
                parameter.field = header_link
                wrap = <img src="|" />
                ATagBeforeWrap = 1
            }
        }
        10.20 = TEXT
        10.20.if.isFalse.field = header_link
        10.20.stdWrap.field = header
        10.20.stdWrap.wrap = <h1>|</h1>
    }
}

除非tt_contentheader字段均为正值,否则结果会显示header_link image字段。以下是我在测试中使用的tt_content记录的相关字段。 (||表示空字段值。)

uid|hidden|Sorting|CType|header|image|deleted|colPos|header_link|
29|0|256|text|Regular text element|NULL|0|0||
30|0|512|image|Image element|0|0|0|file:37|
31|0|384|image|Image element with no image|0|0|0||
32|0|768|div|Divider|NULL|0|0||

我将hiddendeleted列作为提醒添加,因为如果其中一列设置为1,则CONTENT select函数不会将renderObj的记录返回给使用。还检查开始和结束日期,以及当前用户是否具有对content元素的访问权限。请参阅"select" in the TypoScript Reference manual

对象上的多个TypoScript if语句通过隐式逻辑AND连接在一起。请参阅"if" page in the TypoScript Reference及其更复杂的&#34;示例在"Explanation"下有两个条件。

以下是此测试中涉及的if逻辑。

Object page.30.renderObj.10.10.
uid|header_link|if.isTrue.field = header_link|image|if.isFalse.field = image|Result
29||no|NULL|no|not rendered
30|file:37|yes|0|yes|rendered
31||no|0|yes|not rendered
32||no|NULL|no|not rendered

Object page.30.renderObj.10.20.
uid|header_link|if.isFalse.field = header_link|Result
29||yes|rendered
30|file:37|no|not rendered
31||yes|rendered
32||yes|rendered

如果我们仅对if.isTrue.field = header_link对象使用page.30.renderObj.10.10测试,并且不进行if.isFalse.field = image测试,则输出显示会产生相同的结果。但是,保持if.isFalse.field = image测试更接近请求,并说明检查多个字段。