質問

私はいくつかのパラメータを取るマクロを持っています。これらのいくつかはオプションであり、パラメータが空のままの場合はそれがデフォルトに置き換えられます。

今の質問は、通常のWebデザイナーのための可能な限り、これは同じくらい簡単にする方法です。このケースを処理するために、私の例から離れて、他のpossibityはありますか?

例1:

ここで明らかな問題は、オプションの値です。

#macro (myTag $param1 $param2 $param3)
...
#end

実施例2:

そして、ここでの問題は、同じマクロが一度、すべての変数が再設定されていない以上使用される可能性の問題である。

#set ($param1="value1") 
#set ($param2="value2") 
#set ($param3="value3") 

#macro (myTag)
...
#end
役に立ちましたか?

解決

のVelocity 1.6の時点では、オプションまたは名前付きパラメータがサポートされていません。私たちは、将来のリリースでは、それが利用可能に表示される場合がありますので、この機能を提出した最新のパッチがありました。

一方で、リストまたは値のマップを渡し考えます。たとえば、次のようにあなたがのparamsのマップに渡すことができます(ベロシティ1.5以上が必要です):

#macro(myMacro $p)
  item 1: $p.param1
  item 2: $p.param2
#end

#set($params = {"param1" : "val1", "param2":"val2"})
#myMacro($params)

ディスプレイます:

item 1: val1
item 2: val2

、オプションのパラメータを処理パラメータをチェックするマクロ内の#ifを使用します。マップに新しい要素を追加すると、少し厄介です。 Javaメソッド「置く」が値を返すので、あなたは戻り値を処分するの#setを使用する必要があります。 (それ以外の場合は、結果のテキストで表示されます)。

#macro(myMacro $p)
  #if(!$p.param1)#set($dummy = $p.put("param1", "default1"))#end
  #if(!$p.param2)#set($dummy = $p.put("param2", "default2"))#end
  #if(!$p.param3)#set($dummy = $p.put("param3", "default3"))#end

  item 1: $p.param1
  item 2: $p.param2
  item 3: $p.param3
#end

#set($params = {"param1" : "val1", "param2":"val2"})
#myMacro($params)

ディスプレイ

item 1: val1
item 2: val2
item 3: default3
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top