• ベストアンサー

Smartyの変数について

Smartyでテンプレートに変数を表示させる場合、assign以外で変数を記述する方法はありますか? 以前EC-CUBEの改造をしていた時は$this->index=34567;などと値を入力したものをテンプレートで$indexとすれば34567が表示されていたのですが・・・。 何か設定が必要なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • xyz951
  • ベストアンサー率18% (15/79)
回答No.2

変数指定用にクラス作れば良いんじゃないの? でその中でassignで変数割り当てすればいい

52966925
質問者

補足

ありがとうございます。 その後EC-CUBEを詳しく見たところ、ご指摘のとおり変数指定用のクラスを作ってassignしていました。

その他の回答 (2)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

$smarty->_tpl_vars['hoge'] = 'nemui';

52966925
質問者

お礼

ありがとうございます。

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

メンバ変数を外部から直接いじるってのはあまり綺麗な方法ではないですが。 Smartyクラスを継承して、MySmartyを作り __set() という、マジックメソッドを実装すれば良いです。 例えば。 public function __set($name, $value) { $this->assign($name, $value); } こんな感じ。 ただし上記のコードはあくまでも例です。 $nameが必ず1文字以上の先頭が英字から始まるStringであるかどうかのバリデートなどなど。・・・しないとヤバいです。 そうすら、 $smarty = new MySmarty(); $smarty->index=34567; というようなアサインも可能です。 ただし、先頭でも言ったようにメンバ変数を直接いじるように作るのは、あまり行儀良くないですけどね。 作り方によってはとてもヤバくなります。 例えば、Smarty内で使ってるメンバ変数を上書きしてしまった場合、潜在的なバグを生みます。

52966925
質問者

お礼

ありがとうございます。 その後EC-CUBEを詳しく見たところ、マジックメソッドは使っておらず、assignobjなどの関数を作り、その中で$thisの中身をassignしていました。 メンバ変数を直接いじる時は気をつけないといけないんですね。勉強になりました!

関連するQ&A