2016-07-27 4 views
2

NEOSテンプレートの1つでは、(指定した範囲内で)乱数を生成し、後で使用するために変数に格納する簡単なタスクを解決しようとします。別のビューヘルパーの結果を表示するFluid-Alias-View-Helper

デフォルトのビューヘルパーのいずれもこのような機能を提供していないので、私は独自のビューヘルパーを開発しました。これは最小値と最大値を必要とします。内部的にビューヘルパーはPHPのrand($min, $max)を使用します。

次の例では、私のテンプレートで働いている:

site:RandomNumber(0, 17) 

これは乱数を出力予想通り。しかし、今私は複数回使用する必要があるので、変数に結果を格納する必要があります。

私は -viewヘルパーに別名流体に出くわした:

<f:alias map="{number: 33}"> 
    The number is {number} 
</f:alias> 

これは、その結果:

The number is 33 

今、私は33ではない数をしたいが、私のRandomNumberの結果-view-helper。しかしこれは言って例外がスローされます

<f:alias map="{number: {site:RandomNumber(0, 17)}}"> 
    The number is {number} 
</f:alias> 

は、私は次のようなものを試していないf:aliasビューヘルパーの

The argument "map" was registered with type "array", but is of type "string" 
in view helper "TYPO3\Fluid\ViewHelpers\AliasViewHelper" 

ドキュメントは受け入れ値は、他のビューヘルパーであると言うが、彼ら決してそれについての例を挙げてください。

私はこのアプローチに完全に間違っていますか?単純に流体テンプレート内に単純な変数を割り当てることはできませんか?

詳細情報: 私はウェブサイト上のスライダーを持っていますが、これは(ほとんど)ページロード時に別のスライドから始める必要があります。だから私はスライダのマークアップで何度か参照しなければならないこのランダムなスライド番号をつかむ必要があります。

答えて

2

私は再びそれに掘っ第1出力しようとした:

{site:randomNumber(0,17)} <- was output as the string, not the expected result 
<site:randomNumber min="0" max="17" /> <- this was the expected output 

最初の1、私は別名ヘルパー右にそれを使用して動作させるために必要なものですか?

私は最初にこの最初の作品を確実にしなければなりませんでした。

私は無作為に引数名を指定する必要があると推測しました。だから、私はこれを試した:

{site:randomNumber({min: 0, max: 17})} 

PHPから来て、私は引数を持つ配列を与えることが解決策だと思った。しかし、私は間違っていた。 「流体インライン記法」をグーグルで

このリソースに私を導く:

https://wiki.typo3.org/Fluid_Inline_Notationがあり、私は非常に近かったこと、見ました。引数は、配列表記では、そうTHISが期待される出力を生成しない、その名前によって与えられることにしましたが、:

{site:randomNumber(min: 0, max: 17)} 

だから私は解決策をさらに一歩です。だから私はこのスニペットを取り、このようなエイリアスヘルパーにそれを貼り付け:

<f:alias map="{number: {site:randomNumber(min: 0, max: 17)}}"> 
    The number is {number} 
</f:alias> 

しかしこれは以前と同じ例外につながります。私は私が近づいていると感じましたので、表現を一重引用符で囲むことを推測しました:

<f:alias map="{number: '{site:randomNumber(min: 0, max: 17)}'}"> 
    The number is {number} 
</f:alias> 

これは私が望むすべてのものです。ドキュメンテーションが本当に悪いので、これを理解するのに2日が必要だと考えるのは難しいです。

+0

私はちょうど同様の問題を抱えていました。あなたの答えのために私は1つの式の周りに別の一重引用符を置かなかったので、私のも働いていないことに気付きました!ありがとう! :) 私の場合のように、中括弧が全体の式の周りにない場合でも、式全体にそれらを配置する必要があります: 'arguments = {" property: 'additionalInfos。{i.index} .infoValue' "}' –

1

{site:randomNumber(min: 1, max:10)}である必要があります。ケーシングに注意してください。

{namespace site=Vendor\ExtName\ViewHelpers} 

EDIT:引数がなViewHelperレンダリング機能のパラメータ名と一致する必要がありますがこれは、あなたのテンプレートの先頭に名前空間このようなsiteを登録している、と仮定しています。

+0

もちろん、名前空間が設定されています。それ以外の場合、ヘルパーは通常の出力では動作しませんでした。 'しかし、私はケーシングをチェックした。明らかにケーシングは違いはありません: 'は同じ結果につながります。しかし、私にこれをチェックさせてくれてありがとう! –