smartyでのphpを使った計算
解決済
回答 2
投稿
- 評価
- クリップ 1
- VIEW 1,215
前提・実現したいこと
smartyを使ってecサイトを制作しているのですが、
DBに登録されている税別価格をsmatyで読み込み、
それにphpを使って1.08を掛けて税込価格を表示したいです。
発生している問題・エラーメッセージ
該当のソースコード
<span class="price">
<!--{if $arrProducts[cnt].price02_min == $arrProducts[cnt].price02_max}-->
<!--{$arrProducts[cnt].price02_min|reduce_price:$arrProducts[cnt].product_id:$smarty.session.customer.customer_id|sfPreTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->
<!--{else}-->
<!--{$arrProducts[cnt].price02_min|reduce_price:$arrProducts[cnt].product_id:$smarty.session.customer.customer_id|sfPreTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->~
<!--{$arrProducts[cnt].price02_max|reduce_price:$arrProducts[cnt].product_id:$smarty.session.customer.customer_id|sfPreTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->
<!--{/if}-->
円</span><span class="mini">(税込)</span></span>
試したこと
上記のif文で、金額を読み込んでいると思うので、
ここで読み込んだ変数をphpに受け渡せればと思ったのですが、
良い方法が見つかりませんでした。
<!--{php}-->
echo "テンプレ内PHP出力テスト";
<!--{/php}-->
を使ってphpが動作することは確認済みです。
補足情報(言語/FW/ツール等のバージョンなど)
smartyもphpも初学者の為、
前提から理解していないかもしれませんが、
どうぞよろしくお願い致します。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+3
実現方法2つ挙げておきました。
index.php
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
require 'vendor/autoload.php';
// コンストラクタ
$smarty = new Smarty();
$smarty->addPluginsDir('plugins');
// 強制コンパイル
$smarty->force_compile = true;
// XSS対策
$smarty->escape_html = true;
// 税率
$tax_rate = 1.08;
$smarty->assign('tax_rate', $tax_rate);
$price = 997;
$smarty->assign('price', $price);
$smarty->display('index.tpl');
index.tpl
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<p>{($price * $tax_rate)|floor|number_format|default:0}</p>
<p>{$price|add_tax|number_format|default:0}</p>
</body>
</html>
plugins/modifier.add_tax.php
<?php
/**
* plugins/modifier.add_tax.php
*
*/
function smarty_modifier_add_tax($price)
{
return floor($price * 1.08);
}
税率は変更されるものなので、「基準日」の概念も必要となりますね。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
0
Smartyの変数をPHPで利用するのは、以下のようにすればできると思います。
これでyouchanaさんのやりたいことは実現できるでしょうか?
// Smartyの変数$priceをPHPの変数$varに代入
$var = $this->get_template_vars("price");
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.99%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
kei344
2017/03/04 20:28
質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。