如何在 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>
在我的 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>