「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
定価と売価から割引率を求める
当ブログの読者の方から、以下の質問をいただきました。
MTでネットショップを運営しているのですが、定価と売価の割引率を、自動で表示したいのです。
今、現在は、定価フィールドと売価フィールドを作っています。
記事のネタとして手頃だったので(笑)、この質問に答えてみます。
1.変数と計算
Movable Type 4.1以降では、変数を使って簡単な計算を行うことができます。
計算を行うには、タグを以下のように書きます。
<mt:SetVar name="変数名" op="演算子" value="値">
演算子は以下を指定することができます。
演算方法 | 演算子 |
---|---|
足し算 | + |
引き算 | - |
掛け算 | * |
割り算 | / |
例えば、「a」という変数が定義されているとして、その値を5増やすには、以下のように書きます。
<mt:SetVar name="a" op="+" value="5">
また、valueのところを「value="$変数名"」のように書くと、ある変数と他の変数を計算することもできます。
例えば、変数aから、変数bの値を引くには、以下のように書きます。
<mt:SetVar name="a" op="-" value="$b">
2.テンプレートタグの値を変数に代入する
テンプレートタグの値を計算に使いたい場合、まずテンプレートタグの値を変数に代入してから、上記の手順で計算を行います。
テンプレートタグの値を変数に代入するには、以下のように書きます。
<テンプレートタグ名 setvar="変数名">
例えば、ブログ全体の記事数を変数entry_countに代入するには、以下のように書きます。
<$mt:BlogEntryCount setvar="entry_count"$>
3.割引率を求める
いただいたご質問は、「定価と売価がカスタムフィールドに入っている場合に、それらの値から割引率を求める」という話でした。
割引率をパーセント単位で求めるなら、計算式は以下のようになります。
割引率=(定価-売価)/定価×100
定価/売価を、それぞれMTEntryRegularPrice/MTEntryRetailPriceというカスタムフィールドに入れているとします。
そして、割引率を変数discountに求めたいとします。
その手順は以下のようになります。
- 定価(MTEntryRegularPrice)/売価(MTEntryRetailPrice)を、それぞれ変数regular_price/retail_priceに代入します。
- 変数discountに、定価(変数regular_price)を代入します。
- 変数discountから、売価(変数retail_price)を引きます。
- 変数discountを、定価(変数regular_price)で割ります。
- 変数discountの値を100倍します。
この流れをテンプレートタグにすると、以下のようになります。
<$mt:EntryRegularPrice setvar="regular_price"$> <$mt:EntryRetailPrice setvar="retail_price"$> <$mt:SetVar name="discount" value="$regular_price"$> <$mt:SetVar name="discount" op="-" value="$retail_price"$> <$mt:SetVar name="discount" op="/" value="$regular_price"$> <$mt:SetVar name="discount" op="*" value="100"$>
後は、割引率を出力したい位置に、以下のようなタグを入れます。
<$mt:GetVar name="discount"$>
4.割引率の小数点以下の処理
ここまでの手順だけだと、定価/売価の組み合わせによっては、割引率に小数点以下の値が含まれます。
例えば、定価が900円で売価が800円だと、割引率は11.111111・・・%になります。
割引率の小数点以下を切り捨てたりする方法は、以前に「MTで税込み計算&3桁ごとにコンマで区切る&切り捨てなど」の記事で解説しています。
そちらも合わせてお読みください。