smartyで複雑な計算を行う場合はどうすればよいのでしょうか?
簡単な計算は、
<{$a/$b}>
のように記述出来ますが、カッコを使った方法などはどうすれば良いのでしょうか? 色々と試したり検索しているのですが出来ません。
外部のPHPファイルに各変数の値を渡して計算して元のページに計算結果を戻す、がベストな方法でしょうか?
例えば、$a/($b-$c)という式があったとします。
これをsmartyで計算してその結果を表示する場合、
<{assign var="d" value=$b-$c}>
<{$a/$d}>
って少しまわりくどい方法なら出来ますが、もっと複雑な式などになる場合、こんな感じで順を追って一つづつ値をアサインして最終的に答えを導き出すのが普通なのでしょうか?
もっと簡単にカッコなどを使うことって出来ますか?
また、外部にPHPファイルを用意して、そこで計算をして結果を戻してくるって方法も取れるのでしょうか?
PHPで計算する方法があるなら、是非教えていただけませんか?
フォームなどから外部のPHPに値を渡すなら、
$a = &_POST[$a]
って書くのは知っているのですが、smartyの値を渡したり戻したり、って方法が分かりません。
宜しくお願いします。
No.4ベストアンサー
- 回答日時:
挙げられた例ですと、テンプレート側に計算処理を始めるトリガーを置く必要は無さそうですので、
No.2さんの仰るように、計算したあとでSmartyに渡すのが一般的かと思います。
ただ、そこで補足されている以下の考え方は少々異なります。
>smartyテンプレートで受けた値を外部のPHPスクリプトに渡して計算を行い、その計算結果をsmartyテンプレートに戻すという方法が正解となのですよね。
どこかに $smarty->assign('B', $sinchou); といったコードがあるはずですが、その続きで
$bmi = $sinchou * $shinchou / 10000 / max($taiju, 1);
$smarty->assign('BMI', $bmi);
のように追加で新しい変数を与えるイメージになります。
#maxはゼロ除算対策です
テンプレート側では他の変数と同じように扱えます。
<{$A|escape}>さんのBMI値は<{$BMI}>です。
また、数値のフォーマット程度の処理であれば修飾子などを使って、テンプレート側で行ってしまうこともよくあります。
<{$A|escape}>さんのBMI値は<{$BMI|string_format:"%.1f"}>です。
反応が遅れてしまいすみませんでした。
解説頂いたのを飲み込むのに時間が掛かってしまいました。
まだ実践が出来ていないのですが仕組みは理解できたので、更に勉強していきたいと思います。ありがとうございます。
No.3
- 回答日時:
作ろうとしているのはページャでしょうか?
#外してたら以下の回答も的外れになるかも知れませんが…
そういう計算するクラスを作ってSmarty側からpublicのメンバ変数を参照させたりしてます。
--- PHPスクリプト側 ---
$pager = new MyPager($totalCount, $currentPage, $limit);
$smarty->assign('pager', $pager); // assignは1度
--- Smartyテンプレート側 ---
<{$pager->totalCount}>件中 <{$pager->dispFrom}>件~<{$pager->dispTo}>件を表示しています。
テンプレート側に書きたいパラメタ(例えば幅のpx数など)がある場合は関数のプラグインを登録しておくのも良いと思います。
http://www.smarty.net/manual/ja/api.register.fun …
>外部にPHPファイルを用意して、そこで計算をして結果を戻してくるって方法も取れるのでしょうか?
このニュアンスに近いと思います。
この回答への補足
回答ありがとうございます。
ページャの意味が分からず、勉強させて頂きましたが、多分、ページャというものではないと思います。初心者で意図がうまく伝えられず本当にすみません。
希望としては、私のサイトに訪れたユーザー(友人)が、自己紹介ページを作成出来るような環境を整えたいと思っています。
自己紹介ページといっても、設置されたフォームに、名前($A)、身長($B)、体重($C)、年齢($D)、コメント($E)の項目を入力させて、それを表示するだけのページなのですが…。
そのフォームで入力された値を各々のページで表示出来るようにはなりましたが、計算などを行う際の流れが理解出来ていない状態です。
例えば、フォームで入力された、"$C"を"$B"で割る場合、smartyテンプレート側に<{$C/$B}>と書いておけば、その答えが表示されるのですが、これを計算用にPHPファイルを別途用意して、
<?
$taiju = $C;
$sinchou = $B;
$kekka1 = ($C/$B);
$kekka2 = ($B/$C);
?>
のような計算をし、その結果を自己紹介ページにて表示させる場合はどうすれば良いのでしょうか?
テンプレート上の"$C"といっても、例えばAさんとBさんの2人が自己紹介ページを作成したら、"$C"にはAさんの値やBさんの値などもあるので、それぞれの値を個別にPHP側の、「$taiju」「$sinchou」へアサインする必要がある(??)と思うのですが解決出来ていません…。
そして、各自己紹介ページにPHP上の計算結果を渡す場合も、どのようにアサインさせるのかも分からないです…。
お手数をお掛けして申し訳ありません。
もし、お手すきな時間がございましたら、ご教授頂けないでしょうか?
宜しくお願いいたします。
No.2
- 回答日時:
Smartyは「テンプレートエンジン」です。
ロジック部分とテンプレート部分を切り分けるために使うものです。
Smarty内で計算(ロジック)するって事そのものに、そもそも使い方がちがっています。
目的を失うとSmartyを使っている意味が全くなくなりますよ。
ロジック側で計算した値をSmartyにassignすればいいだけです。
この回答への補足
回答ありがとうございます。
返信が遅れてしまい申し訳ありません。
初心者の為、値のassgin方法について勉強させて頂いてました。
smarty側に計算を行うようなものを記述するのは間違っているんですね、ご助言ありがとうございます。
そうすると、smartyテンプレートで受けた値を外部のPHPスクリプトに渡して計算を行い、その計算結果をsmartyテンプレートに戻すという方法が正解となのですよね。
ただ、外部PHPとの連携(アサイン方法)がいまいち理解出来ておりませんorz
No.1
- 回答日時:
「Smarty 計算」あたりのキーワードで検索して見つかる
たくさんのサイトのうち、もしかすると参考URLに書いた
サイトなどが役に立つかもしれません。
参考URL:http://xfield.info/modules/tautech/content0136.h …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(お金・保険・資産運用) 至急!【Wolt】各メニューの価格設定の簡単な計算方法 3 2023/03/05 11:58
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- HTML・CSS CSS上での計算を行うためのルールについて教えてください。 3 2022/08/15 14:43
- 計算機科学 2進数の計算について 2進数の値は全て8ビットで負数は2の補数形式とする。結果が8ビットで表現出来な 3 2023/07/22 14:08
- 数学 時々、回答者の見識に疑念を抱いてしまうんです。私だって本当は皆様のことを疑いたくはありません。しかし 2 2022/11/27 12:23
- 労働相談 有給休暇使用時の賃金の計算方法について 5 2022/04/04 00:02
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- 一戸建て 耐震性、工法について質問させていただきます。 現在、3階建てを計画しています。検討していく中で、se 2 2022/10/08 11:09
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- PowerPoint(パワーポイント) エクセルファイルが他のデーターソースへのリンクが含まれている場合の調べ方を教えてください。 2 2023/08/24 13:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mod でうまく
-
65536は2の何乗なのでしょうか?
-
モジュラス103の計算とは何でし...
-
C言語のプログラミングの問題で...
-
asp.net 計算式について
-
EXCELなどで「返す」という表現
-
MATLABの利点と欠点
-
C# 計算処理中に実行中ウィン...
-
fortran 掃き出し法で逆行列
-
趣味で「乗換案内」みたいなソ...
-
排他的論理和 BCC(水平パリテ...
-
Androidstudioの勉強をしていま...
-
バッチファイルでウインドウを...
-
骨折リスク評価のFRAXについて...
-
[急募]Pythonについてです。
-
数値計算の高速化 (cos, sin, exp)
-
プログラムの質問
-
流体解析のプログラムの作成で...
-
タクシー料金の問題です
-
変化させるセルが変化しない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
C言語の課題で、1年の秒数を計...
-
バッチファイルでウインドウを...
-
骨折リスク評価のFRAXについて...
-
変化させるセルが変化しない
-
CとFORTRANの計算速度はどちら...
-
なぜオーバーフローになるので...
-
数値計算の高速化 (cos, sin, exp)
-
モジュラス103の計算とは何でし...
-
C# 計算処理中に実行中ウィン...
-
モジュロ
-
引き放し法による除算アルゴリ...
-
60進数の四則計算
-
C言語についてです。 再帰を使...
-
Perlで時間の計算
-
CRC8を教えてください
-
傾いた四角形内の範囲の条件式
おすすめ情報