smartyで出力した値を同ページ内のphp部分に出力したいと考えています。


■サンプル
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$name}

{php}

$filename = '{$name}';←ここに出力したい

if (file_exists($filename)) {
print "ファイルあり";
} else {
print "ファイルなし";
}

{/php}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

当然ながら上記のような方法ではできないのですが、
うまく取得する方法はありますでしょうか?

本来はSmartyでやりたいのですが、オープンソースのEC-CUBE内に
設置するため、他の部分が把握できず困っています。

上記のようなことができればシンプルなコードにはなりませんが、
すべて解決しますのでご教授宜しくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:2008/11/12 19:58:42
  • 終了:2008/11/13 02:05:04

ベストアンサー

id:fatena No.2

suinger回答回数126ベストアンサー獲得回数262008/11/13 00:39:05

ポイント40pt

以下はどうでしょうか?

  • - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

{$name}

{php}

$filename = '{/php}{$name}{php}';←ここ

if (file_exists($filename)) {

print "ファイルあり";

} else {

print "ファイルなし";

}

{/php}

  • - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
id:gelgelgel

これは最初のほうに試しました・・

エラー表示になるかと思います。

一度お試しになってからご回答お願いします。

2008/11/13 01:11:37

その他の回答(2件)

id:bayan No.1

bayan回答回数100ベストアンサー獲得回数132008/11/12 22:38:26

ポイント40pt

ひとつ、Smarty のインスタンスをグローバル変数として参照し、

get_template_vars() で割り当てられた値を得るというのを

思いつきました。

■PHPスクリプト hoge.php

$smarty = new Smarty;

//ディレクトリ指定等は省略...

$smarty->assign('name','foo');
$smarty->display('hoge.tpl');

■テンプレートファイル hoge.tpl

{$name}

{php}

global $smarty;
$filename = $smarty->get_template_vars('name');

if (file_exists($filename)) {
print "ファイルあり";
}else{
print "ファイルなし";
}

{/php}

それから、{php}{/php} の中では $this という変数で Smarty のインスタンスにアクセスできるようです。

http://www.phppro.jp/phpmanual/smarty/language.function.php.html

{$name}

{php}

$filename = $this->get_template_vars('name');

if (file_exists($filename)) {
print "ファイルあり";
}else{
print "ファイルなし";
}

{/php}

と書いても動きました。

id:gelgelgel

ご回答ありがとうございます!!

私が探し求めてたのはものズバリです!!

通常のsmartyの環境では動作確認できたのですが、

EC-CUBE内では動きませんでした。分かりにくくなるため

省いていたのですがEC-CUBE内ではSmartyのタグが

hiddenタグで囲まれています。

▼ここから

$filename = $this->get_template_vars('arrProductsClass[0].name');

$filename = $this->get_template_vars('arrProductsClass[0].name|escape');

$filename = $this->get_template_vars('');

▲ここまで

というのでOKかと思ったのですがいずれもうまくいきませんでした。

ご存知でしたら宜しくお願い致します。

2008/11/13 01:58:09
id:fatena No.2

suinger回答回数126ベストアンサー獲得回数262008/11/13 00:39:05ここでベストアンサー

ポイント40pt

以下はどうでしょうか?

  • - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

{$name}

{php}

$filename = '{/php}{$name}{php}';←ここ

if (file_exists($filename)) {

print "ファイルあり";

} else {

print "ファイルなし";

}

{/php}

  • - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
id:gelgelgel

これは最初のほうに試しました・・

エラー表示になるかと思います。

一度お試しになってからご回答お願いします。

2008/11/13 01:11:37
id:satoumizu No.3

satoumizu回答回数2ベストアンサー獲得回数02008/11/13 01:43:58

すごい手っ取り早い方法で

テンプレートにアサインする前に

$_GET['test'] = $name;

して

$filename = $_GET['test'];

しちゃえば

id:gelgelgel

それができないので困っています。

2008/11/13 02:04:33
  • id:fatena
    失礼いたしました。
    以下の方法で取得を確認致しました。

    テンプレート変数は、Smartyオブジェクトの(内部的な)メンバ変数 $_tpl_vars によって管理されています。
    それを利用。
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    {$name}

    {php}

    $filename = $this->_tpl_vars['name'];←ここ
    if (file_exists($filename)) {
    print "ファイルあり";
    } else {
    print "ファイルなし";
    }

    {/php}
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • id:gelgelgel
    >fatenaさん

    確認できました!!
    ありがとうございました!!
  • id:gelgelgel
    その後試行錯誤した結果、EC-CUBE上でも
    無事動作させることができました!!

    ありがとうございました!!

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

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

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

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