- ベストアンサー
Smartyの変数について
Smartyでテンプレートに変数を表示させる場合、assign以外で変数を記述する方法はありますか? 以前EC-CUBEの改造をしていた時は$this->index=34567;などと値を入力したものをテンプレートで$indexとすれば34567が表示されていたのですが・・・。 何か設定が必要なのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
変数指定用にクラス作れば良いんじゃないの? でその中でassignで変数割り当てすればいい
その他の回答 (2)
- tany180sx
- ベストアンサー率63% (239/379)
$smarty->_tpl_vars['hoge'] = 'nemui';
お礼
ありがとうございます。
- inu2
- ベストアンサー率33% (1229/3720)
メンバ変数を外部から直接いじるってのはあまり綺麗な方法ではないですが。 Smartyクラスを継承して、MySmartyを作り __set() という、マジックメソッドを実装すれば良いです。 例えば。 public function __set($name, $value) { $this->assign($name, $value); } こんな感じ。 ただし上記のコードはあくまでも例です。 $nameが必ず1文字以上の先頭が英字から始まるStringであるかどうかのバリデートなどなど。・・・しないとヤバいです。 そうすら、 $smarty = new MySmarty(); $smarty->index=34567; というようなアサインも可能です。 ただし、先頭でも言ったようにメンバ変数を直接いじるように作るのは、あまり行儀良くないですけどね。 作り方によってはとてもヤバくなります。 例えば、Smarty内で使ってるメンバ変数を上書きしてしまった場合、潜在的なバグを生みます。
お礼
ありがとうございます。 その後EC-CUBEを詳しく見たところ、マジックメソッドは使っておらず、assignobjなどの関数を作り、その中で$thisの中身をassignしていました。 メンバ変数を直接いじる時は気をつけないといけないんですね。勉強になりました!
補足
ありがとうございます。 その後EC-CUBEを詳しく見たところ、ご指摘のとおり変数指定用のクラスを作ってassignしていました。