重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Smartyでテンプレートに変数を表示させる場合、assign以外で変数を記述する方法はありますか?

以前EC-CUBEの改造をしていた時は$this->index=34567;などと値を入力したものをテンプレートで$indexとすれば34567が表示されていたのですが・・・。

何か設定が必要なのでしょうか?

A 回答 (3件)

変数指定用にクラス作れば良いんじゃないの?


でその中でassignで変数割り当てすればいい

この回答への補足

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

補足日時:2009/02/21 15:05
    • good
    • 0

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

    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2009/02/21 15:03

メンバ変数を外部から直接いじるってのはあまり綺麗な方法ではないですが。



Smartyクラスを継承して、MySmartyを作り
__set() という、マジックメソッドを実装すれば良いです。

例えば。
public function __set($name, $value) {
$this->assign($name, $value);
}
こんな感じ。
ただし上記のコードはあくまでも例です。
$nameが必ず1文字以上の先頭が英字から始まるStringであるかどうかのバリデートなどなど。・・・しないとヤバいです。

そうすら、
$smarty = new MySmarty();
$smarty->index=34567;
というようなアサインも可能です。


ただし、先頭でも言ったようにメンバ変数を直接いじるように作るのは、あまり行儀良くないですけどね。
作り方によってはとてもヤバくなります。
例えば、Smarty内で使ってるメンバ変数を上書きしてしまった場合、潜在的なバグを生みます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
その後EC-CUBEを詳しく見たところ、マジックメソッドは使っておらず、assignobjなどの関数を作り、その中で$thisの中身をassignしていました。

メンバ変数を直接いじる時は気をつけないといけないんですね。勉強になりました!

お礼日時:2009/02/21 15:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!