如何在 TYPO3 Fluid 中显示整数 0 但不为空或 NULL

How to show integer 0 but not empty or NULL in TYPO3 Fluid

在我的 TYPO3 Fluid 模板中,我有一个值,我想在显示它之前检查它是否不为空。 我现在的方式:

<f:if condition="{myvalue}">
<div class="myclass">{myvalue}</div>
</f:if>

当我在后端输入 "test" 或“2”之类的值时,这会起作用,如果我不输入任何内容,它就不会显示 div 标记。 但是当我在后端输入“0”时,条件也不成立。我如何修复将显示整数 0,如果它为空(在数据库 NULL 中)不显示? (该值为 0 很常见)

顺便说一句,我试过类似的东西:

<f:if condition="{myvalue} !=NULL">
<f:if condition="{myvalue} >= 0">

但随后也会显示空值。如果我这样做

<f:debug>{myvalue}</f:debug>

我得到这样的东西:

myvalue = NULL 
myvalue = 0 
myvalue = "test"

所以只有第一个不能显示。

希望有人能帮帮我,谢谢。

有两个解决方案,第一个是 bool 类型模型中的 transient 字段,getter 只检查值是否不为空,另外 returns true 如果值是 0 (实际上在大多数语言中 0 是一个值)

第二种解决方案更通用,它只是编写自定义 ViewHelper,这将允许您检查值是否为 0 或是否具有值:

<?php
namespace VENDOR\YourExt\ViewHelpers;

class notEmptyOrIsZeroViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {

    /**
     * @param mixed $value Value to check
     *
     * @return bool the rendered string
     */
    public function render($value) {
        return ($value === 0 || $value === '0' || $value) ? true : false;
    }
}

因此您以后可以将其用作常见 <f:if > 条件的条件,例如:

<f:if condition="{yourNameSpace:notEmptyOrIsZero(value: myValue)}">
    <f:then>Now it recognizes 0 as a value</f:then>
    <f:else>It still DOESN'T recognize 0 as a value</f:else>
</f:if>

我有一个类似的案例,我想检查一个流体变量是否为 0 或正整数。简单的 >= 0 比较是行不通的。在 TYPO3 10 LTS 中,我可以通过这样做来解决这个问题:

<f:if condition="{value} === 0 || {value * 1} > 0">
    value is zero or positive integer
</f:if>

(注意:这也将允许整数字符串,例如“123”或“1st”,但不允许“val3”——基本上正如您在 PHP 中将字符串转换为整数时所期望的那样。)

如果您只想检查 {value} 不为 null 或为空(但允许零作为有效值),您可以将条件简化为:

<f:if condition="{value} === 0 || {value}">
    value is set and not empty
</f:if>