Smartyで配列の長さを取得する方法
前提条件:
Smartyの区切り文字が'{'と'}'であると仮定して、Smartyに配列配列を割り当てます。
Smarty で配列の長さを必要とする場合、配列の後に |count を追加するメソッド呼び出しを使用できることを多くの資料で見てきました。つまり、{array|count} を通じて配列の長さを取得します。しかし、今日テンプレートを書いていたときに、配列の長さを取得できず、返されるのは文字列配列だけであることがわかりました。つまり、{array} の結果のみを返しますが、配列の長さは返しません。
Smartyplugins フォルダーを確認すると、count 関連のメソッドが存在しないことがわかります。つまり、count は php のメソッドを直接呼び出しています。
その後、インターネット上の情報から、count の前に @ を追加すると、配列の長さを正しく取得できることがわかりました。さらにSmartyのソースコードを確認すると、Smartyは属性調整器以降のメソッド名を処理する際に、先頭に@が付いたメソッド名に対して特別な処理を行うことが分かりました。 そこで判断ですが、Smartyの属性調整部でphpで定義した関数を呼び出す場合は@を付けることで表現できます。
1.配列型のメソッドをテストしたところ、@記号を付けないとエラーが発生することが分かりました。 例: 配列の長さを調べるために配列に対して count メソッドを呼び出したい場合は、次のように {array|@count} を呼び出すことができます。また、配列に対して end メソッドを呼び出して配列の長さを確認したい場合は、配列内の最後のデータセットには、{array| @end} を使用できます。
2. 文字列関連の関数をテストしたところ、@ の有無にかかわらず正常に呼び出すことができることがわかりました。
3. その他はまだ慎重にテストされていません。 Smarty の本来の目的はコードとテンプレートを分離することであるため、複雑なロジックを追加しすぎるとインターフェイス設計者にとって問題になるため、smarty で複雑な php 関数を呼び出すことはお勧めできません。 . 一種の拷問。