Как сравнить строку с переменной в TYPO3 Fluid - PullRequest
1 голос
/ 18 марта 2019

Я хотел бы сделать простые сравнения, такие как эквивалент:

if ($somevar === 'somestring')

Теперь я нашел несколько примеров, где это делается так:

<f:if condition="{somevar} == 'somestring'"> 
...

В ядре TYPO3 также есть несколько мест 9.5, пример .

Но официальная документация говорит нам об обратном, и мы должны использовать странный обходной путь, основанный надля массивов:

Строки в XX / YY НЕ допускаются, однако в настоящее время сравнение строк может быть достигнуто путем сравнения массивов

ЕслиViewHelper

Сравнение со строками, например ...., с Fluid пока невозможно из-за сложной реализации.

( Extbase / Fluid )

Что бы это ни значило ...

Чтобы не спрашивать, почему: Каков рекомендуемый способпроводить сравнения строк и переменных в TYPO3 9 и с каких пор это возможно?

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Начиная с TYPO3 8.7, Fluid if-ViewHelper может выполнять сравнения строк, чисел и массивов без обходного пути помещения строк в массивы.Тем не менее, нет поддержки глобализации или регулярных выражений (небо - это предел, если вы пишете пользовательский ViewHelper на PHP).

Поддерживаются следующие операторы сравнения: ==,! =, <, <=,>,> = и%.Также есть поддержка логических операторов && и ||.Вы можете отрицать логическое значение с помощью!(как! {enable}).

Я слышал, что команда документации усердно работает над обновлением и реорганизацией документации Fluid.Тем временем на этой странице есть много полезных советов и подсказок: https://usetypo3.com/24-fluid-tips.html

Примеры (с использованием сочетания тега и встроенного синтаксиса):

1:
<f:variable name="foo">stuff</f:variable>
<f:if condition="{foo} == 'stuff'">
    <f:render partial="FooPartial" arguments="{foo: foo}" />
</f:if>

2:
{f:variable(name: 'bar', value: 123)}
{f:variable(name: 'baz', value: 50)}
{f:if(condition: '{bar} > {baz}', then: 'This will print')}

3:
<f:comment>&& and ||, too:</f:comment>
<f:if condition="{bar} > {baz} && {baz} < 100">This will print.</f:if>

4:
<f:comment>The string "false" will evaluate to boolean false:</f:comment>
{f:variable(name: 'untrue', value: 'false')}
{f:if(condition: untrue, then: 'Will not print', else: 'Will print')}
0 голосов
/ 18 марта 2019

Я думаю, что документация не актуальна.

В более ранних версиях (менее 7) сравнивать строки было невозможно. Поскольку обходной путь был необходим и найден с помощью массива, его продвигали несколькими способами. Таким образом, вы обнаружите, что в Интернете полно

Сегодня можно сравнивать строки, а также несколько выражений OR и 'AND'.

...