Проверить, имеет ли переменная тип массива в жидкости

Можно ли в жидкости проверить, является ли тип переменной массивом? Я ищу что-то вроде этого.

<f:if condition='{myvar.Type == "Array"}'></f:if>

Или я должен создать свой собственный ViewHelper для этой цели?

2 ответа

Решение

Я решил это, написав свой собственный ViewHelper

class TestViewHelper extends AbstractViewHelper 
{
    /**
    * Arguments Initialization
    */
    public function initializeArguments()
    {
        $this->registerArgument('myvar', 'string', 'test', TRUE);
    }

    /**
    * @return integer test
    */
    public function render() 
    {

        $arg      = $this->arguments['myvar'];
        $argType  = gettype($arg);
​
        if (preg_match("/array/i", "$argType")) {
            return 1;    //match
        } else {
            return 0;    //No match
        }
    }
}

Использование:

{namespace mynamespace=YOUR_EXTENSION_NAME\YOUR_VENDOR_NAME\ViewHelpers}

<f:if condition="<mynamespace:isarray myvar='{_all}'/>==1">
    <f:then>
        <strong>_all is an Array</strong><br>
    </f:then>
    <f:else>
        <strong>_all is not an Array</strong><br>
    </f:else>
</f:if>

Вы должны либо создать свой собственный ViewHelper, либо использовать существующий из EXT: vhs.

Работает аналогично f:if ViewHelper:

<v:condition.type.isArray value="{myvar}">
    <f:then>
        ...
    </f:then>
    <f:else>
        ...
    </f:else>
</v:condition.type.isArray>
Другие вопросы по тегам