smarty の中から、PHPの変数を呼び出してsmarty の中で使いたいときにはどうすると簡単なのでしょうか?

{php} ~ {/php} でなんとかするより簡単な方法ありそうです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/01/22 16:04:10
  • 終了:2009/01/27 08:48:47

回答(2件)

id:munyaX No.1

munyaX回答回数120ベストアンサー獲得回数242009/01/22 16:16:17

ポイント35pt

普通に以下のようにする以外の方法ってことでしょうか?

$smarty = new Smarty();
$smarty->assign('hoge'=>1);
{$hoge}


Smartyのドキュメントにもありますが、単純にclassで書いてオブジェクトを丸ごと

渡してやるという方法があります。これだとOOPで書いている分には、assign一回、

テンプレートではメンバ変数やメソッドを呼び出すだけなのでそれなりに楽チンです。

class hoge{
  public $foo = 'a';
  public function bar(){
    print "Hello!";
  }
}

$smarty = new Smarty();
$smarty->assign('obj'=> new hoge());
{$obj->foo}
{$obj->bar()}

■Smartyテンプレート+オブジェクト(まとめ)

http://d.hatena.ne.jp/fuktommy/20081012/1223737284

id:isogaya

ちがいます。smarty テンプレートの中から、PHPにある変数(グローバルなど)を呼び出したいのです。

2009/01/22 16:35:37
id:kemworld No.2

雪国暮らし回答回数62ベストアンサー獲得回数12009/01/24 01:29:31

ポイント35pt

グローバル変数や定数にアクセスしたいのなら以下マニュアルページの内容を読めばOKだと思います!

http://www.smarty.net/manual/ja/language.variables.smarty.php

id:isogaya

global宣言した変数を読み込めるわけではないように見えます。

2009/01/24 08:20:06
  • id:munyaX
    仮にグローバル変数を呼び出したいだけなら

    $smarty = new Smarty();
    $smarty->assign('global', $GLOBALS);

    とすればよいような気がします。
    毎回やるのが面倒ならSmartyクラスを継承してその中で定義しておきます。あとは継承したクラスから毎回オブジェクトを作成すればOK。
  • id:isogaya
    通じていないみたいなんですが、

    smarty のテンプレートの中でやりたいのです。

    上記の回答は、テンプレートを呼び出す側の PHP のスクリプトの中の話ではないでしょうか?
    呼び出す側のスクリプトを変更したくないので、中のテンプレートだけ変更をかけてPHPで使っている
    変数をテンプレートにひっぱってきたいのです。

    状況としては、

    PHP のスクリプトの先頭で作業して、グローバル変数化して送り込み、smarty のテンプレート内でそれを取得したいのです。PHPのスクリプトの途中で、smary をインスタンスしているので、そこはいじりたくないのです。グローバル変数送り込みは、そのずっと手前で行います。

  • id:munyaX
    「PHPは変更しない」的なことはどこにも書かれていないのですが…。
    さすがにそれは書いていただかないと、これだけの情報ではまず汲み取れません。


    後はSmartyのプラグインを作って呼び出す方法ですかね。
    以下のようなコードをpluginディレクトリに置いて(未検証)

    function smarty_function_getglobals($params, &$smarty){
    $name = $params['name'];
    return($GLOBALS[$name]);
    }

    テンプレートから次のような感じで呼び出します。
    {getglobals name="hoo"}



    ■テンプレート関数プラグイン
    http://sunset.freespace.jp/smarty/SmartyManual_2-6-6J_html/plugins.functions.html
  • id:isogaya
    ありがとうございます。言葉足らずですみません。やはりプラグインかかないとだめっぽいですね。
    あちこちに変更箇所ができるのは面倒なので、{php}{/php} でいくことにします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません