2016-07-18 15 views
2

変数の型が配列であるかどうかチェックするのは流体で可能ですか?私はこのようなものを探します。変数が流体に配列型であるかどうかをチェック

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

また、この目的のために独自のViewHelperを作成する必要がありますか?

+0

ユースケースは何ですか?そのようなロジックはテンプレートには属しません。 – pgampe

+1

変数が配列型であるかどうかを調べてから、部分的に渡す必要があります。 – Black

答えて

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> 
+2

'return is_array($ this-> arguments ['myvar']);'を使うと、ここで正規表現のマジックを行う必要はありません。 – Jost

+0

ヒントのためにクール、thx! – Black

4

独自のViewHelperを作成するか、existing one from EXT:vhsを使用する必要があります。

それはf:ifなViewHelperに似ています:

<v:condition.type.isArray value="{myvar}"> 
    <f:then> 
     ... 
    </f:then> 
    <f:else> 
     ... 
    </f:else> 
</v:condition.type.isArray> 
+0

次に、私は自分のviewhelperを書かなければならないと思います。拡張子 "VHS:Fluid Viewhelpers"をインストールしようとすると、 "あなたのPHPバージョンは許可されているよりも高い"となります – Black

+0

TYPO3のどのバージョンを使用していますか? – Jost

+1

TYPO3のどのバージョンを使用していますか? 6.2.xの場合はPHP 7を使用しないでください(正式にはPHP 5.3.7から5.6まで互換)。7.6.xの場合、PHP 7.0.xをサポートするバージョン3.0.0でVHSを使用できるようにする必要があります。 – Jost

関連する問題