カスタムフィールド
カスタムフィールドとは、エントリーの記事を書いていくようなユニットとは違い、固定の入力方法で更新できるような入力欄のことです。値段の表記方法も人によって様々なので、たとえば、商品Aでは「¥8,000」、商品Bでは「8,000円」と記述されてしまっているという問題を防ぐことができます。
a-blog cms のカスタムフィールドについては、テンプレートを手で書く必要がありますが、その分、自由度が高い入力欄を作成できます。
カスタムフィールドの種類
カスタムフィールドには以下の5種類のものを設定できます。
- ブログ
- カテゴリー
- エントリー
- ユーザー
- モジュール
カスタムフィールドのタグの基本
以下のようにカスタムフィールドを作る事ができます。どこかでご覧になった事があるかと思います。フォームのHTMLと同様に書く事で a-blog cms のカスタムフィールドを作る事ができると理解してください。
表示用のフォームタグ
メールアドレスの入力欄自体になります。スタイルを適応したい場合はこのinputタグにclass属性を記述してください。
<input type="text" name="mailaddress" value="{mailaddress}" />
システムに mailaddress という項目の存在を伝える記述
システムに伝えるための記述なので、type属性はhidden(非表示)にします。
<input type="hidden" name="field[]" value="mailaddress" />
必須入力を指示するための指定
こちらもシステムに伝えるための記述なので、type属性はhidden(非表示)にします。
<input type="hidden" name="mailaddress:validator#required" />
ブログのカスタムフィールド
まず、どこのファイルを修正すればいいかを知る方法からご紹介します。まず、管理ページ>ブログの順に移動し、カスタム情報のタブをクリックして、フォームを開きます。
以下はローカルPC上にインストールした場合のアドレスになります。レンタルサーバにインストールした際には localhost の部分がオリジナルのドメインになります。
http://localhost/demo/bid/1/admin/blog_edit/#acms_custom
このテンプレートファイルは以下のファイルになります。
/themes/system/admin/blog/edit.html
これを site2015 テーマ内で修正するのであれば、以下の場所にコピーして修正する事になります。
/themes/site2018/admin/blog/edit.html
これが基本ではありますが、この edit.html が次のバージョンアップでメンテナンスが入ってしまい、アップデートしたバージョンの管理画面とテンプレートに差が出ることもあるかもしれません。もちろん、このファイルを修正し、しっかりカスタマイズすることも方法の1つです。
今回、より簡単にカスタムフィールドをカスタマイして頂けるように、edit.html の中に書かれているインクルードの記述をご紹介します。以下のインクルードの記述の場所には何もファイルが存在しておりません。ですので、カスタマイズ前の段階では何も表示されません。
@include("/admin/blog/field.html")
この場所に field.html を置く事で、あたかも edit.html を修正したかのような効果がある事になります。
/themes/site2018/admin/blog/field.html
テキストの入力欄を1つ、プルダウンメニューを1つ追加する際のサンプルは以下のようになります。
<h3>カスタムフィールド サンプル</h3>
<input type="text" name="sample1" value="{sample1}" />
<input type="hidden" name="field[]" value="sample1" />
<select name="sample2">
<option value="aaa"{sample2:selected#aaa}>aaa</option>
<option value="bbb"{sample2:selected#bbb}>bbb</option>
<option value="ccc"{sample2:selected#ccc}>ccc</option>
</select>
<input type="hidden" name="field[]" value="description" />
このようにして多くのカスタムフィールドを設定し、柔軟にフォームを作成でき、クライアントに分かりやすいインターフェースを提供できるようになります。
先ほどまでは入力ページの入力欄の説明でしたが、表示用のページに Blog_Field というカスタムフィールドのデータを表示するモジュールを利用し、以下のようにテンプレートに記述します。
<!-- BEGIN_MODULE Blog_Field --> <p> sample1 : {sample1}</p> <p> sample2 : {sample2}</p> <!-- END_MODULE Blog_Field -->
エントリーのカスタムフィールド
エントリーのカスタムフィールドについては、いろいろなコントロールが可能です。例えば、このカテゴリーのときとか、このブログのとき、このエントリーのときのみ、というように、同じエントリーのフォームで違うフォームを表示する事ができれば、必要なところで必要なカスタムフィールドのみを表示させる事が可能になります。
ブログのカスタムフィールドと同様にエントリーのカスタムフィールド用の field.html を用意します。
/themes/site2018/admin/entry/field.html
内容としては、以下のように記述します。
<!--#include file="/admin/entry/blog%{BID}.html" --> <!--#include file="/admin/entry/category%{CID}.html" --> <!--#include file="/admin/entry/entry%{EID}.html" -->
グローバル変数とインクルードを利用して、特定のブログや、カテゴリー、エントリーのときにのみ、読み込むファイルを用意します。例えば、カテゴリーIDが 1 のときは以下のようなファイルを用意します。
/themes/site2018/admin/entry/category1.html
エントリーのカスタムフィールドについては、エントリーについては修正時点でないとIDが確定していません。カテゴリーのプルダウンで変更してもカスタムフィールドは変化しませんので、注意する必要があります。