smartyテンプレート内のassign関数で文字列と変数を連結する

Read More

smartyテンプレート内でassign関数を使って複数の変数を一つの変数にまとめたい場面があったりする。


■基本形
{$str1|htmlspecialchars}{$str2|htmlspecialchars}{$str3|htmlspecialchars}

これだと一つ一つの変数にsmarty修飾子を付ける必要がある。



■assign関数:複数の変数を連結
{assign var="str" value="`$str1``$str2``$str3`"}
{$str|htmlspecialchars}

一つの変数にまとめられているのでsmarty修飾子は一つで済む。



assign関数の値に変数を利用する場合は`(バッククォート)で変数を括る。
こうすることで正しく変数と認識させることができる。


変数と文字列と合わせて記述することもできる。


■assign関数:文字列と変数を連結
{assign var="str" value="ai`$str1`ue`$str2`o`$str3`"}



これならif文なんかでassign関数自体の作成を分岐させておけば、呼び出し側では同じ変数一つ呼び出せば済む。




--
ここからはsmartyに関する個人的なグチ。
読まなくてもよい。


仕事上、smartyは昔から何度も使う機会があったりするけど、
いまだにその良さが理解できない


smartyはモデルとビューとを分離するのに一役買ってくれるので、プログラマとデザイナの作業分担を図れるというのがうたい文句の一つ。


しかしsmartyを使っていても結局テンプレート側でプログラムっぽいことが全然できてしまう。

だからsmartyテンプレートを使っていても、結局のところ色々なルールを設けて運用していくことになる。

「こういう処理はテンプレートでやっちゃダメ」
とか
「このsmartyタグは使っちゃダメ」
とか。

こうなるとPHPファイルでテンプレートファイルを作ってルールを設けてやったってなんら変わりない。


smartyである必要がない



多言語を扱うプログラマが書いたテンプレートというのは、その言語によってテンプレート内に埋め込む動的な部分の書き方が違う。
だからデザイナがリデザインしようとテンプレートを触ろうとするととたんに苦労する。

こういう時デザイナがsmartyという一つの言語さえ覚えていれば、
そしてプログラマもsmartyの書き方を覚えてそれでテンプレートを書いていれば、デザイナは多言語ごとの書き方を覚えおく必要はなくなる。
だから理屈の上では(1言語のみの習得なので)デザイナは楽になる。


だが実際には会社で扱う言語はそう多くなく、1~2個程度と少なかったりするし、そもそもデザイナがsmartyを覚えてなかったりする。


また、そもそもデザイナがsmartyを使いこなせる頭があるのならば、他の言語でif文やfor文が書かれていたってなんとなくは読める。


つまるところ、一人がsmartyを覚えて使うから他の者もsmartyを使わなくてはならない状況になっているだけなのだ。



今回の記事にしたようにsmartyのマニュアルには書いてなかったりする書き方があったりする。

そういうのを調べて使いこなすほうがよっぽど時間の無駄
smarty独自の仕様を覚えることになんの意味があるの?


いまだにsmartyに何の疑いもなく導入している会社はハッキリいってアホだと思う。

開発責任者がそれを推進しているのならばそいつは無能。


以前のシステムで使われていたから仕方なく今も使っている、というのならばまだ多少許せるところはあるが。

それでも、後から入る子のことを考えるのならばsmartyを使わない方向に持っていくべきである。



グチが長くなったが結論。



smartyはいらない子。




-- 2013/03/31 文字列の修正: きたない表現があった気がするので文章修正。




Comments(3)

1  115ちゃん  2012/06/27 (水) 11:37 ID:XXXXXXXXX
いらない子。

2  名無しさん  2014/03/28 (金) 17:59 ID:TnDcPXg15
いらない子。

smartyがあまりにも不自由で情報検索中にここに遭遇しました。
いらない子。全く同じように考えていたので激しく同意。

3  名無しさん  2017/03/03 (金) 16:00 ID:n9sdfu115
私もそう思う。いらない子