カスタムフィールドのチェックボックスの4つの実装方法について
昨日、チェックボックスのカスタムフィールドの実装について質問されたことをまとめてみました。 チェックボックスの4つの実装方法を考えて、実際に実装してみた方法をご紹介してみます。
- カスタムフィールドの値を表示するだけ
- フィールド毎にラベルのカラーを変更する(通常版)
- フィールド毎にラベルのカラーを変更する(オリジナル校正オプション版)
- チェックの無い項目も表示させたい場合
a-blog cms のHTML形式のメールマガジンを定期的に送付していますが、ご存知でしょうか?
次号(2015年2月23日くらいに配信予定)に、方法3で利用する 校正オプション split を紹介する予定です。登録されていない方は、是非ご登録ください。
メルマガ申し込み
1.カスタムフィールドの値を表示するだけ
新製品 残り僅か
同じ名前のチェックボックスでチェックがあったものをループで表示させる場合には、以下のように記述します。
表示側のテンプレート
<p><!-- BEGIN label:loop --> <span class="acms-label">{label}</span> <!-- END label:loop --> </p>
管理ページ側のテンプレート
<table> <tr> <th>ラベル 1</th> <td> <label class="acms-form-checkbox" for="input-label-在庫限り"> <input type="checkbox" name="label[]" value="在庫限り" id="input-label-在庫限り"{label:checked#在庫限り} /> <i class="acms-ico-checkbox"></i>在庫限り </label> <label class="acms-form-checkbox" for="input-label-新製品"> <input type="checkbox" name="label[]" value="新製品" id="input-label-新製品"{label:checked#新製品} /> <i class="acms-ico-checkbox"></i>新製品 </label> <label class="acms-form-checkbox" for="input-label-おすすめ"> <input type="checkbox" name="label[]" value="おすすめ" id="input-label-おすすめ"{label:checked#おすすめ} /> <i class="acms-ico-checkbox"></i>おすすめ </label> <label class="acms-form-checkbox" for="input-label-残り僅か"> <input type="checkbox" name="label[]" value="残り僅か" id="input-label-残り僅か"{label:checked#残り僅か} /> <i class="acms-ico-checkbox"></i>残り僅か </label> <input type="hidden" name="field[]" value="label" /> </td> </tr> </table>
2.フィールド毎にラベルのカラーを変更する(通常版)
在庫限り おすすめ 残り僅か
1.のデータをカラーで表示させたいという要望があった時には、ループで表示させることができません。4つの別の項目として用意し、それぞれの変数を個別に表示する場所を用意して、その部分を :veil のブロックで囲むことで表示の制御をします。IFブロックを利用することもできますが、判定処理をしない分 :veil の方が処理が少なく済むことになります。
表示側のテンプレート
<p> <!-- BEGIN label2_a:veil --><span class="acms-label acms-label-success">{label2_a}</span> <!-- END label2_a:veil --> <!-- BEGIN label2_b:veil --><span class="acms-label acms-label-danger">{label2_b}</span> <!-- END label2_b:veil --> <!-- BEGIN label2_c:veil --><span class="acms-label acms-label-info">{label2_c}</span> <!-- END label2_c:veil --> <!-- BEGIN label2_d:veil --><span class="acms-label acms-label-warning">{label2_d}</span> <!-- END label2_d:veil --> </p>
管理ページ側のテンプレート
<table> <tr> <th>ラベル 2</th> <td> <label class="acms-form-checkbox" for="input-label2_a-在庫限り"> <input type="checkbox" name="label2_a[]" value="在庫限り" id="input-label2_a-在庫限り"{label2_a:checked#在庫限り} /> <i class="acms-ico-checkbox"></i>在庫限り </label> <input type="hidden" name="field[]" value="label2_a" /> <label class="acms-form-checkbox" for="input-label2_b-新製品"> <input type="checkbox" name="label2_b[]" value="新製品" id="input-label2_b-新製品"{label2_b:checked#新製品} /> <i class="acms-ico-checkbox"></i>新製品 </label> <input type="hidden" name="field[]" value="label2_b" /> <label class="acms-form-checkbox" for="input-label2_c-おすすめ"> <input type="checkbox" name="label2_c[]" value="おすすめ" id="input-label2_c-おすすめ"{label2_c:checked#おすすめ} /> <i class="acms-ico-checkbox"></i>おすすめ </label> <input type="hidden" name="field[]" value="label2_c" /> <label class="acms-form-checkbox" for="input-label2_d-残り僅か"> <input type="checkbox" name="label2_d[]" value="残り僅か" id="input-label2_d-残り僅か"{label2_d:checked#残り僅か} /> <i class="acms-ico-checkbox"></i>残り僅か </label> <input type="hidden" name="field[]" value="label2_d" /> </td> </tr> </table>
3.フィールド毎にラベルのカラーを変更する(オリジナル校正オプション版)
在庫限り 新製品 残り僅か
今回、新しく split という校正オプションを作ってみました。
これを利用すると1つのカスタムフィールドの項目に「表示させる項目」と「Class名」をカンマ区切りで保存させ、それを校正オプションで個別に取り出すことで、2.の部分をループで表示させることができるようになります。
表示側のテンプレート
<p><!-- BEGIN label3:loop --> <span class="acms-label acms-label-{label3}[split(",",1)]">{label3}[split(",",0)]</span> <!-- END label3:loop --> </p>
管理ページ側のテンプレート
<table> <tr> <th>ラベル 3</th> <td> <label class="acms-form-checkbox" for="input-label3-在庫限り,success"> <input type="checkbox" name="label3[]" value="在庫限り,success" id="input-label3-在庫限り,success"{label3:checked#在庫限り,success} /> <i class="acms-ico-checkbox"></i>在庫限り </label> <label class="acms-form-checkbox" for="input-label3-新製品,danger"> <input type="checkbox" name="label3[]" value="新製品,danger" id="input-label3-新製品,danger"{label3:checked#新製品,danger} /> <i class="acms-ico-checkbox"></i>新製品 </label> <label class="acms-form-checkbox" for="input-label3-おすすめ,info"> <input type="checkbox" name="label3[]" value="おすすめ,info" id="input-label3-おすすめ,info"{label3:checked#おすすめ,info} /> <i class="acms-ico-checkbox"></i>おすすめ </label> <label class="acms-form-checkbox" for="input-label3-残り僅か,warning"> <input type="checkbox" name="label3[]" value="残り僅か,warning" id="input-label3-残り僅か,warning"{label3:checked#残り僅か,warning} /> <i class="acms-ico-checkbox"></i>残り僅か </label> <input type="hidden" name="field[]" value="label3" /> </td> </tr> </table>
ユーザー校正オプション
自作の校正オプションは、/php/ACMS/User/Corrector.php に追記します。
2015年2月23日ごろに配信予定のメルマガで紹介します。
使い方は、[split( 区切り文字 , 何番目の項目 )] のように記述します。
4.チェックの無い項目も表示させたい場合
在庫限り 新製品 おすすめ 残り僅か
残念ながら、カスタムフィールドにデータの無い項目をループで表示させることができないので、上記の場合には、2.に近い書き方でIFブロックを利用して表示させることになります。
表示側のテンプレート
<p> <!-- BEGIN_IF [{label4_a}/nem/] --><span class="acms-label acms-label-success">在庫限り</span> <!-- ELSE --><span class="acms-label">在庫限り</span> <!-- END_IF --> <!-- BEGIN_IF [{label4_b}/nem/] --><span class="acms-label acms-label-danger">新製品</span> <!-- ELSE --><span class="acms-label">新製品</span> <!-- END_IF --> <!-- BEGIN_IF [{label4_c}/nem/] --><span class="acms-label acms-label-info">おすすめ</span> <!-- ELSE --><span class="acms-label">おすすめ</span> <!-- END_IF --> <!-- BEGIN_IF [{label4_d}/nem/] --><span class="acms-label acms-label-warning">残り僅か</span> <!-- ELSE --><span class="acms-label">残り僅か</span> <!-- END_IF --> </p>
管理ページ側のテンプレート
<table> <tr> <th>ラベル 4</th> <td> <label class="acms-form-checkbox" for="input-label4_a-在庫限り"> <input type="checkbox" name="label4_a[]" value="在庫限り" id="input-label4_a-在庫限り"{label4_a:checked#在庫限り} /> <i class="acms-ico-checkbox"></i>在庫限り </label> <input type="hidden" name="field[]" value="label4_a" /> <label class="acms-form-checkbox" for="input-label4_b-新製品"> <input type="checkbox" name="label4_b[]" value="新製品" id="input-label4_b-新製品"{label4_b:checked#新製品} /> <i class="acms-ico-checkbox"></i>新製品 </label> <input type="hidden" name="field[]" value="label4_b" /> <label class="acms-form-checkbox" for="input-label4_c-おすすめ"> <input type="checkbox" name="label4_c[]" value="おすすめ" id="input-label4_c-おすすめ"{label4_c:checked#おすすめ} /> <i class="acms-ico-checkbox"></i>おすすめ </label> <input type="hidden" name="field[]" value="label4_c" /> <label class="acms-form-checkbox" for="input-label4_d-残り僅か"> <input type="checkbox" name="label4_d[]" value="残り僅か" id="input-label4_d-残り僅か"{label4_d:checked#残り僅か} /> <i class="acms-ico-checkbox"></i>残り僅か </label> <input type="hidden" name="field[]" value="label4_d" /> </td> </tr> </table>