• ベストアンサー

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

  • 【smarty】smartyの$this->って何を表しているんですか

    【smarty】smartyの$this->って何を表しているんですか?【EC-CUBE】 EC-CUBE、smartyを勉強中のものです。 smartyなのかEC-CUBEどちらの質問になるのかさえもわからなかったのですが・・・・・ 現在EC-CUBEをカスタマイズしているのですが、smartyの理解が浅く苦戦しています。 大変基本的な質問で申し訳ないのですが、よくfunction内で使われている『$this->』の意味を教えて下さい! $this変数の中身は、普通にどこかでnewされているものが入っているのでしょうか?(EC-CUBEで使われているもの?) それとも$thisという書き方で、例えば$thisの入ってるfunction内のメソッドを呼び出しているのでしょうか?(smarty側のもの?) どなたかご教授お願いいたします。

  • smaryテンプレートを使う上で、Smartyオブジェクトを二つ作成し

    smaryテンプレートを使う上で、Smartyオブジェクトを二つ作成し、それぞれのそのなかの変数をひとつのテンプレートに表示するという方法は可能でしょうか?つまりそれぞれを同じテンプレートに表示する、という方法はできるのでしょうか?PHPは下記のようになります。 $smarty = new Smarty(); $smarty2 = new Smarty(); $smarty->assign('abc', $def); $smarty2->assign('ghi', $jkl); $smarty->display('aaa.tpl'); $smarty2->display('aaa.tpl'); それとも、オブジェクトと表示するテンプレートは1つずつでないといけないとだめで、$smartyと$smarty2は、どっちかひとつに統一する必要があるのでしょうか?

    • ベストアンサー
    • PHP
  • [Smarty] 空の変数は0に反応するもの?

    php---------------- (1)… $smarty->assign('post', ''); (2)… $smarty->assign('post', 1); Smarty------------- <option value="">指定しない</option> {section name=m loop=24 start=0} <option {if $post != '' && $post == $smarty.section.m.index}selected{/if}> {$smarty.section.m.index} </option> {/section} これは0時~23時までを選択できるプルダウンメニューで、$postにデータが入っている場合は$postに該当する物をセレクトしている状態にして表示させたいという目的です。デフォルトは「指定しない」にしたいです。 この場合(2)の時は正常に1時が選択されている状態になるのですが、(1)の時は0に反応してしまいます。PHPだとこれで大丈夫だと思うのですが、Smartyでは空の変数は0としてみなすのでしょうか?

    • ベストアンサー
    • PHP
  • Smartyのテンプレートで未定義の変数がエラーになってしまいます。

    Smartyでテンプレートで、存在しない変数が書かれていてもUndefined indexのエラーを表示しないように したいのですが、Smartyの設定で可能でしょうか?

    • 締切済み
    • PHP
  • Smartyに関しまして

    require_once("Smarty/Smarty.class.php"); $smarty = new Smarty(); $smarty->template_dir = "./templates"; $smarty->compile_dir = "./templates_c"; $smarty->assign("message", "こんばんは"); $a = array('hello','php','html'); $smarty->assign('a',$a); $smarty->display("index.tpl"); これでindex.tplで出力すると日本語部分が「?????」になってしまいます。 何か設定がいるんでしょうか??

    • ベストアンサー
    • PHP
  • Smarty変数の値をJavascript変数代入

    よろしくお願いします。 SmartyのテンプレートにPHPファイルからassignされた変数を、 Javascriptの変数に割り当てたいと思います。 Smartyのテンプレート内では、デフォルトの設定だと、 {$hoge} として、値をHTMLとして書き出す仕様ですが、 色々な諸事情から、このデフォルト設定を、 {{$hoge}} として、{ を二度重ねないと機能しないように設定変更しています。 そこで、下記のようなJavascriptを実行しても上手くいかず、かなりはまってしまってます。 お助けください。 ※ダメな例 <script type="text/javascript"> var balloonA = {{$hoge}}; document.writeln (balloonA); </script> ※↓これだと当然出力されます。 ※aaaaa と表示される。 <script type="text/javascript"> var balloonA = "aaaaa"; document.writeln (balloonA); </script> なぜ、上の書き方だと変数内の値を取得できないのでしょうか? "{{$hoge}}"や'{{$hoge}}' として試しました。でもだめです。 色々ネットで探しましたが、 {literal} を使って・・・・というのもやりましたが、ダメでした。 そもそも、Smartyのデフォルト設定を {{ に変更しているので関係ないと思います。 ん~~何卒お力をおかしください。

    • 締切済み
    • PHP
  • smartyについて

    phpからassignしテンプレートに表示するには問題ないのですがテンプレートでassignし 表示させたく単純に以下のようにしてみましたがエラーになってしまいます。 <{assign var="aaa"value="名前"}> <{$aaa}> ※デリミタ設定は『<{』と『}>』で指定してます エラー内容は以下の通りです。 Fatal error: Smarty error: [in テンプレートファイル line assignしている行]: syntax error: invalid attribute name: '=' (Smarty_Compiler.class.php, line 1550) in ~中略~\Smarty\Smarty.class.php on line 1093 なんとなくではありますが'='が原因のような事はわかるのですが解決できずにおります。 この場合どうすればいいのでしょうか?

    • ベストアンサー
    • PHP
  • Pleskサーバ利用時にSmartyのassignが出来ません

    現在、Pleskサーバを利用して、 Apache+Smarty+PHPのWEBプログラミングを行っているのですが、 PHPのユーザ関数内で、Smartyのassign()関数を使用した場合に、Smarty変数の生成を行うことが出来ません。 例としては以下のような感じになります。 ================================================================ <? $smarty->assign( 'a', 'a' ); // テンプレート上で{$a}とするとaと表示される test( $smarty ); $smarty->display('index.tpl'); // index.tplを表示する function test( $smarty ) { $smarty->assign( 'b', 'b' ); // テンプレート上で{$b}としてもbは表示されない } ?> ================================================================ $smartyというのは、$smarty = new Smarty();を行ったものです。 このプログラム自体は、Plesk導入前は動作しておりましたが、 Plesk導入後は上記のように、ユーザ関数外では、通常通りassign()を行うことが出来るのですが、ユーザ関数内だと無効となってしまいます。 また、Pleskのsafe_modeはOffにしております。 Pleskは初めて使用するため、動作上まだ知らないことばかりで、とても初歩的なミスをしているかと思いますが、Pleskに詳しい方がおりましたらどうか教えて頂きたいと思います。

    • ベストアンサー
    • PHP
  • 【smarty】予約変数に可変変数

    POST送信されたデータが複数あります。 <{$smarty.post.address1}> <{$smarty.post.address2}> <{$smarty.post.address3}> というように書けば取得できるのですが、項目数が可変な為 ループで処理できないものかと思います。 そこで下記のように試しましたがエラーになります。 assignのvalueの記述が間違ってるような気もしますが、わかりません。 そもそも、予約変数はこのような使い方はできないのでしょうか? <{section name=cnt loop=$kosu}> <{assign var="str" value='$smarty.post.address'|cat:$smarty.section.cnt.iteration}> <{$str}>←$smarty.post.address1のデータを出力してほしい <{/section}>

    • ベストアンサー
    • PHP
  • Smartyについて

    Smartyについて Smartyをインストールしました。 OS:ubuntu インストール先:/usr/local/lib/Smarty-2.6.26 php.ini[include_path]の設定:/usr/local/lib/Smarty-2.6.26/libs/を追加 /var/www/以下にtestフォルダ作成 /var/www/test/index.html | /test/index.php chmod 644 | /tempalates chmod 775 templates | / index.tpl chmod 644 /templates_c chmod 775 templates_c /configs chmod 775 configs /cache chmod 775 cache index.phpの内容 <?php require_once(”Smarty.class.php"); $o_smarty=new Smarty(); $o_smarty->template_dir="./templates/"; $o_smarty->compile_dir="./template_c/"; $o_smarty->assign("name","world"); $o_smarty->display("hello.tpl"); ?> index.tplの内容 <html> <head> <title>Hello,world</title> </head> <body> Hello,{$name}! </body> </html> http://web.domain/test/index.php を入力するとエラーは出ませんが、何も表示されません。 これだけで、原因を特定出来ないのかもしれませんが、何処が悪いのでしょうか? 御教示お願いいたします。