expexp.jp

Movable Type

【Movable Type】税抜と税込を表示する

Movable Type(本当はPowerCMSだけど)の案件で、元々税抜価格だけのページに税込価格も追加したいという要望があって対応。単純に税込価格を追加するだけならopモディファイア使って計算するだけなんですけど、軽減税率も対応させなきゃならないのでちょっと複雑に。

MTの状況

  • 税抜価格はカスタムフィールドに入力済み
  • 税率が変わる税込価格用のフィールドを新しく作りたくない
  • 軽減税率対象の商品があるのでチェックボックスを作る
  • 商品いっぱい、CSV先生の出番

実際のコード


// cf_priceは税抜価格のカスタムフィールド
<$mt:cf_price regex_replace="/,/","" setvar="tax_calc"

gt;

// cf_reduced_tax_rateは軽減税率の対象かどうか(チェックボックス)
<mt:If tag="cf_reduced_tax_rate">
<$MTSetVar name="tax_calc" value="1.08" op="*"


gt;
<mt:Else>
<$MTSetVar name="tax_calc" value="1.1" op="*"


gt;
</mt:If>

// 税抜価格
<$mt:cf_price numify="1"


gt;

// 税込価格(軽減税率対応)
<$mt:Var name="tax_calc" regex_replace="/(\d*)\.(\d*)/","$1" numify="1"


gt;

cf_priceなどのカスタムフィールドは各々で置き換えてください。

解説

税抜価格を変数へ代入

<$mt:cf_price regex_replace="/,/","" setvar="tax_calc"$>

regex_replaceでカンマを抜く処理をしてから変数tax_calcに代入指定ます。

税抜価格のカスタムフィールドに数値だけ入力されていればいいんですが、ご丁寧にカンマも含めて入力される場合があります。カンマが入ると文字列となってopモディファイアで計算が出来ないので、入力値からカンマを取り除いてあげる必要があります。

軽減税率の条件分岐

<mt:If tag="cf_reduced_tax_rate">
  <$MTSetVar name="tax_calc" value="1.08" op="*"$>
<mt:Else>
  <$MTSetVar name="tax_calc" value="1.1" op="*"$>
</mt:If>

軽減税率はカスタムフィールドで分岐させます。チェックボックスの値はCSVで一括で更新します(CSVDataImExporterプラグインなど)。

分岐後はそれぞれの税率で計算し、変数へ代入し直します。

価格の表示

<$mt:cf_price numify="1"$>

<$mt:Var name="tax_calc" regex_replace="/(\d*)\.(\d*)/","$1" numify="1"$>

税抜価格はカスタムフィールドの値を出力するだけです。3桁区切りのカンマを入れたいのでグローバルモディファイアのnumifyを入れています。

税込価格は計算済みの値を出力します。価格によっては小数点第2位まで出てくるのでregex_replaceで小数点以下を除きます。こちらにも3桁区切りのカンマを表示させたいのでnumifyを入れています。