Smartyのテンプレート内の処理で計算、加工をする方法
2014/06/26
Smartyのテンプレート上で計算をする場合
Smartyを使う場合、テンプレート上では PHPと同様な記述で変数を扱うことができません。
そのため、PHP上で計算をしようとしたり、ループさせて条件にヒットしたレコードが設定件数に達したらループを抜ける、といった処理を作ろうと思うと、Smarty用の記述をする必要があります。
そんな場合の処理です。
Smartyでは「assign」を使って変数に値を入れたり、計算をしたりします。
【サンプル】
例えば、ニュース表示で、「categoryId」が「3」のものを最大 3個まで表示するという処理の場合は、以下の様になります。
———————–
|
1 2 3 4 5 6 7 8 9 10 |
{assign var="count" value=0} {foreach from=$data["news"] item="each"} {if $count < 3} {if $each["categoryId"] == "3"} <li>{$each["newsDate"]} {$each["newsTitle"]}<br /> {$each["newsBody"]|nl2br}</li> {assign var="count" value=$count+1} {/if} {/if} {/foreach} |
———————–
上記の 1行目の様に、先頭に「assign」を記述し、変数名を「var」で指定し、その中に入れる値を「value」で指定します。
PHPでの記述では「$count = 0」とするところを、「{assign var=”count” value=0}」と記述する、ということになりますね。
また、計算をする場合も同様に、assign、var、valueで指定をします。
具体的には 7行目のように、先頭に「assign」を記述し、計算結果を入れる変数名を「var」で指定し、「value」で計算式を指定します。
PHPの記述では、「$count=$count+1」とするところを「{assign var=”count” value=$count+1}」と書いていることになります。
PHPでは「$count+1」の記述を「$count++」とすることができますが、Smartyのテンプレート上ではその記述はできないようです。(エラーにはなりませんが、計算はされていないようです。)
処理と表示を分ける意味において、SQLを発行するタイミングで、カテゴリ、件数と絞った SQLを実行する方がいいのは間違いないのですが、例えば 1ページにカテゴリごとに分けてニュースを複数表示する、といった場合などは、SQLを複数実行するよりは表示の処理で振り分けをする方がいい、という判断をすることもあるでしょう。
そういった場合には、このようなテンプレート上で処理を記述する必要があるかと思いますので、このような対応が必要になってきます。
(処理と表示を分ける意味において、内部処理で「categoryId」が「3」になるレコードだけを別の変数に分けておき、テンプレート側ではそれを表示するだけ、という処理の方が本来あるべきつくりであることは間違いないのですが。)
下記のオフィシャルサイトを参考にしました。
http://www.smarty.net/docs/ja/language.function.assign.tpl
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
WindowsのXAMPPのPHPではstrptimeは使用不可。代替はdate_parse_from_formatを使う
strptimeはWindowsのPHPには未実装。LinuxとMacで挙動が異なる。PHP8.1で非推奨になる。なので日付のチェックはdate_parse_from_formatを使おう。使い方を詳細解説。
-
-
PHP range関数を使って階乗と重複組み合わせを計算
PHPの range関数を使って階乗と重複組み合わせを計算し、それを元に乱数発生器を作成しました。
-
-
SEO対策用タイトル、ディスクリプションの文字数カウントツール
SEO対策に使える文字数カウントツールで文字数の条件の説明も行っています。
-
-
ECCUBEを開発環境から本番ドメインに変更でエラーが・パス変更について
レンタルサーバでサーバ会社から割り当てられたURLで開発し、本番公開時にドメインを当てたらエラーが!そんな場合の対処方法の解説。対処方法は簡単ですが管理画面からは対応不可。
-
-
路線・駅検索をPHPで実装する方法解説。GoogleMapsの緯度経度から計算し検索
路線・駅検索の仕組みの構築は大変。登録する側も最寄り駅が多い場合は大変。なので簡易に実装するため緯度経度に基づき直線距離を計算する処理を考案して実装して、その処理を解説。
-
-
XML形式の値を配列形式に変換・PHPでは simplexml_load_string()
XMLとは「Extensible Markup Language」の略でテキストベースのデータフォーマット。XMLをPHPで配列に変換するWebツールの紹介とその処理「simplexml_load_string()」関数についての解説。
-
-
数値がMySQLのint(11)に保存できない!PHPの変数が本当にint型か確認!
PHPでintegerとdoubleが混在するような計算をする場合は要注意!計算結果が整数値であっても途中で使用する変数にdoubleの値が入っているときは計算結果がintegerではない場合があります。
-
-
QRコード(二次元バーコード)作成サービスを公開
QRコード(二次元バーコード)を生成するサービス。QRコードにする文字列を入力するだけで QRコードが簡単に作れる。オプションとして、画像サイズ、余白サイズ、エラー訂正レベルがある。
-
-
cURLを利用する際の注意点「
&」があるURLは「”」で囲むcURLでURLはダブルクォーテーションで囲む。LinuxでもWindowsでもコマンドでは「&」は意味を持つ文字のためエラー原因になる。クォーテーションは常につけておく方が無難。
-
-
ECCUBE mtb_constants initパラメータ設定の項目を追加する方法
ECCUBEのパラメータ設定で設定できる項目を追加する方法を説明します。