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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
ECCUBE mtb_constants initパラメータ設定の項目を追加する方法
ECCUBEのパラメータ設定で設定できる項目を追加する方法を説明します。
-
-
配列の値をテキスト表示する際に「、」でつなげるときの処理方法の一例
配列の値を「、」でつないで出力する際、単純にforeachで繰り返し処理をすると「イヌ、サル、キジ、」となるが文字列最後の「、」を出力しない方法を3つ解説している。
-
-
路線・駅検索をPHPで実装する方法解説。GoogleMapsの緯度経度から計算し検索
路線・駅検索の仕組みの構築は大変。登録する側も最寄り駅が多い場合は大変。なので簡易に実装するため緯度経度に基づき直線距離を計算する処理を考案して実装して、その処理を解説。
-
-
ECCUBEのポイント設定、ポイント付与率を一括で変更する方法解説
ECCUBEの商品個別に設定してあるポイントを一括で変更する方法を解説。ECCUBEには商品個別のポイントを一括して変更する機能がありません。SQLを作成して一括置換!
-
-
連想配列のキーも値もまとめてhtmlspecialchars()でサニタイズする関数の作成解説
PHPの配列・連想配列のキーと値をまとめてhtmlspecialchars()関数でサニタイズ(無害化、無毒化)を行う関数を作成。連想配列のキーはarray_map()関数でのサニタイズは無理。
-
-
PHP画面が真っ白 header(“Location: $url”);
PHPの開発で header(“Location: $url”);を使うと画面が真っ白になる不具合が出る場合もあります。
-
-
PHP range関数を使って階乗と重複組み合わせを計算
PHPの range関数を使って階乗と重複組み合わせを計算し、それを元に乱数発生器を作成しました。
-
-
include、requireのパス指定をdirname(__FILE__)、__DIR__と書く理由
include、requireのパスの指定を dirname(__FILE__)、__DIR__で記述する理由に付いて解説。相対パス、絶対パスを直書き、パスを書かない場合は何が問題かを説明。
-
-
PHPのスクレイピングライブラリ「PHP Simple HTML DOM Parser」の使い方
PHPのスクレイピングライブラリ「PHP Simple HTML DOM Parser」の使い方を解説。要素を取得する方法、そこから属性を取得する方法を解説。また、マニュアルにはない注意点なども解説。
-
-
SEO対策用タイトル、ディスクリプションの文字数カウントツール
SEO対策に使える文字数カウントツールで文字数の条件の説明も行っています。