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を入れています。