09. 1月 2013 · [Smarty] テンプレート内で連想配列を宣言して使用する はコメントを受け付けていません。 · Categories: WEB制作 · Tags: , ,

ちょっとハマったけど地味に便利だったのでメモ。

Smarty は PHP から配列を渡すことで、ラジオボタンやチェックボックスを簡単に作ってくれる機能があります。そして、テンプレート内で PHP の関数を使用できます。

PHP から渡す値は SQL で読み込んだデータそのもの、という単純な状態の場合、簡単な連想配列を使ってラジオボタンを作りたいという状況になりました。PHP のコードは追加したくない、Smarty だけで何とかしたい…と考えて、調べてみた結果、自分が求める方法はこちらが一番近いと感じました。

Smarty のテンプレートで配列を定義する – XCL Labo

ですが、これだと連想配列が使えません。考え方を変えて、連想配列を使わなくてもいいようにする、という方法も考えましたが、PHP の関数が使える → unserialize 使えばいけるんじゃね?ということで、Smarty のテンプレート内で連想配列を使う方法を考えてみました。

PHP 側でちょっとした準備が必要です(あとで消す)

unserialize するためには、serialize されたデータがなくてはなりません。簡単な配列をシリアライズしたものを一旦画面に表示させます。

echo serialize(array(‘Y’=>’はい’, ‘N’=>’いいえ’));

すると、配列がシリアライズされて表示されます。

a:2:{s:1:”Y”;s:6:”はい”;s:1:”N”;s:9:”いいえ”;}

これを Smarty で使ってしまおう!というわけですね。このシリアライズされた文字列が取得できれば、 PHP で記述した上記のコードはもういりません。

あとは Smarty だけでなんとかするよ

さて、これを Smarty で使うためには、一度変数に格納してから unserialize する必要があります。unserialize したデータは配列になっているので、ラジオボタンやチェックボックスに使うことができます。

シリアライズしたデータを Smarty で使うにあたってのポイントは、デリミタを変数で使用すること。こうしないと正常に渡せません。また、シングルクォーテーションで囲んでしまうと変数が無効になるので、そのまま渡しても良いのではないかと。

12. 6月 2012 · [Smarty] PHPの関数を修飾子として使いたい小技メモ はコメントを受け付けていません。 · Categories: WEB制作 · Tags: , ,

Smartyの修飾子でPHPの関数を使えるので、利用して面白かった小技のメモ。増やしたい予定。

Smarty で in_array を使う

PHP だと in_array($needle, $haystack) なんだけど、Smartyで第二引数を修飾子の方に持って行って、こうなる。

{if $needle|in_array:$haystack}

この “干し草の山の中から針を捜す” って表現、ちょっと好き。でも無駄骨を折るって意味はどうよ。

range で 数字を選択するセレクトボックスを作成する

個数を選ばせたい時などに重宝します。1~5とか、0~10とか。ただ、optionsで設定するとvalueが0から振られるので、1から設定したい時はoutputとvaluesに設定すること。

PHP だと range(1,5) なので、第二引数を修飾子の変数として使うから、こうなる。

{html_options name=”num” values=1|range:5 output=1|range:5}
{html_options name=”num” options=0|range:10}

preg_replace を利用する

PHPだと preg_replace(/<span>.+</span>/, ”, $text) なので、

{‘/<span>.+</span>/’|preg_replace:”:$text}

となる。あくまで第一引数に対して修飾子を適用するイメージ。