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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
PHPでスクレイピング。phpQueryとphp-simple-html-dom-parserの比較と設置方法
「PHP スクレイピング」で検索すると「phpQuery」ばかりヒットするが、10年以上も放置されている。なので今も開発が続いている「PHP Simple HTML DOM Parser」をオススメする。
-
PHPのスクレイピングライブラリ「PHP Simple HTML DOM Parser」の使い方
PHPのスクレイピングライブラリ「PHP Simple HTML DOM Parser」の使い方を解説。要素を取得する方法、そこから属性を取得する方法を解説。また、マニュアルにはない注意点なども解説。
-
配列の値をテキスト表示する際に「、」でつなげるときの処理方法の一例
配列の値を「、」でつないで出力する際、単純にforeachで繰り返し処理をすると「イヌ、サル、キジ、」となるが文字列最後の「、」を出力しない方法を3つ解説している。
-
PHP range関数を使って階乗と重複組み合わせを計算
PHPの range関数を使って階乗と重複組み合わせを計算し、それを元に乱数発生器を作成しました。
-
PHPのソースで見慣れない記号が出てきた・アロー演算子(->)、ダブルアロー演算子(=>)
PHPのプログラムソースには見慣れない記号が出てきます。その意味や調べ方です。
-
ECCUBEを開発環境から本番ドメインに変更でエラーが・パス変更について
レンタルサーバでサーバ会社から割り当てられたURLで開発し、本番公開時にドメインを当てたらエラーが!そんな場合の対処方法の解説。対処方法は簡単ですが管理画面からは対応不可。
-
PHP画面が真っ白 header(“Location: $url”);
PHPの開発で header(“Location: $url”);を使うと画面が真っ白になる不具合が出る場合もあります。
-
フォルダを指定してファイルのパーミッションを変更するプログラム
フォームからフォルダ、パーミッションを指定しパーミッションを変更するサンプルプログラムの解説です。
-
複数銘柄を指定して株価チャートを一覧するツール公開
入力銘柄の5日間、3か月間、6か月間、1年間、2年間の株価チャートを一覧表示しますのでチャートで売買判断をするのに最適です。
-
ECCUBE2.13.3で商品規格の在庫数が無制限から変更できないバグがある
2.13.3固有のバグである商品規格の在庫数の入力エリアがアクティブにならない不具合を解消する解説です。product_class.tplの2行を修正するだけの簡単対応です。