定価と売価から割引率を求める

当ブログの読者の方から、以下の質問をいただきました。

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桁ごとにコンマで区切る&切り捨てなど」の記事で解説しています。
そちらも合わせてお読みください。