Bug #86969
closedstdWrap ifEmpty/ifNull/ifBlank are evaluated even if content is there
100%
Description
Take this as example (and imagine some heavy processing behind the COA object in ifEmpty):
page = PAGE page.10 = TEXT page.10.value = Hello world! page.10.ifEmpty = TEXT page.10.ifEmpty { cObject = COA cObject.1 = TEXT cObject.1.value = I should never cObject.2 = TEXT cObject.2.value = be seen }
The whole COA is processed and then discarded useless.
Updated by Gerrit Code Review almost 6 years ago
- Status changed from New to Under Review
Patch set 1 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/58928
Updated by Gerrit Code Review almost 6 years ago
Patch set 2 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/58928
Updated by Gerrit Code Review about 5 years ago
Patch set 3 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/58928
Updated by Gerrit Code Review about 5 years ago
Patch set 1 for branch 9.5 of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/62142
Updated by Wolfgang Klinger about 5 years ago
- Status changed from Under Review to Resolved
- % Done changed from 0 to 100
Applied in changeset ba43decca80cf5f2797b08802c1348dc5de4a146.
Updated by Francois Suter almost 5 years ago
I understand the idea but the implementation is wrong for the "ifEmpty" function. Indeed "ifEmpty" bases itself on the PHP function "trim" which considers:
" " (ASCII 32 (0x20)), an ordinary space.
"\t" (ASCII 9 (0x09)), a tab.
"\n" (ASCII 10 (0x0A)), a new line (line feed).
"\r" (ASCII 13 (0x0D)), a carriage return.
"\0" (ASCII 0 (0x00)), the NUL-byte.
"\x0B" (ASCII 11 (0x0B)), a vertical tab.
as empty characters. But the check that was introduced about whether to call "ifEmpty" or not checks emptiness with the "empty" PHP function which considers:
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
as empty elements. This is very different from "trim" (excerpts taken from the PHP manual).
I would say the proper check should be:
$functionName === 'ifEmpty' && trim($content) !== ''
Updated by Francois Suter almost 5 years ago
- Related to Bug #90318: stdWrap.ifEmpty not called anymore on potentially empty strings added
Updated by Francois Suter almost 5 years ago
I opened a specific bug report: https://forge.typo3.org/issues/90318
Updated by Sascha Egerer over 4 years ago
- Related to Bug #90908: Zeros are not treated as empty values in `.ifEmpty` added