ホーム > サポート・マニュアル > チュートリアル > カスタムフィールド > カテゴリーごとに異なるカスタムフィールドを設定する2つの方法
カテゴリーごとに異なるカスタムフィールドを設定する
あるカテゴリーのエントリーで使いたいカスタムフィールドは、その他のカテゴリーのエントリーにとっては不要なことがあります。そのカテゴリーにあわせたカスタムフィールドが、エントリー編集画面に表示されるのが理想的な形といえるでしょう。
今回はこのように、カテゴリーごとに異なるカスタムフィールドを表示する方法について、2つ紹介します。
方法1.ルールを利用する
基本的な方法としては、あるカテゴリーに対する『ルール』を指定し、テーマ設定からエントリー編集ページに使用される、テーマやテンプレートファイルを変更する方法があります。
エントリー編集ページのテーマやテンプレートを複数用意して、ルールを設定することで、カテゴリーごとに異なるカスタムフィールドを表示することができます。
エントリーの編集ページを指定します
カスタムフィールドの追加方法については、前回の「カスタムフィールドの基本的な使い方(前編)」をご覧ください。
- メリット
- 設定が比較的容易・CMS初心者でも扱いやすい
- デメリット
- テンプレートの増加・メンテナンス性がやや低い
方法2.グローバル変数とインクルードを利用する
応用的に、グローバル変数とインクルードを併用した方法もあります。先ほどの方法よりもCMSに慣れてきた人に適した方法です。理解さえできればファイルが煩雑になりすぎずメンテナンス性を保てます。
- グローバル変数とは
- 表示中のページがもつ情報(今いるカテゴリーの名前やエントリーのIDなど)を表示する特殊な変数です。%{HOGE}の書式で記述します。詳しくはリファレンス:グローバル変数をご覧ください。
ここではグローバル変数の%{CID}を利用します。これは、今いるカテゴリーのIDを表示するものです。
インクルード対象のファイル名を動的に指定する
/admin/entry/edit.html内の step#apply と step#reapply に追記
<!--#include file="/admin/include/customField%{CID}.html" -->
このようなインクルードの記述を/admin/entry/edit.htmlの、step#applyとstep#reapplyに追記します。インクルードの記述の中にグローバル変数を組み込んでいます。このように記述すると、たとえばカテゴリーIDが5に相当するページを表示しているときには
カテゴリーIDが5に相当するページを表示しているとき
<!--#include file="/admin/include/hogehoge5.html" -->
というファイル名としてインクルードの処理がされます。インクルードよりも先に、グローバル変数の処理が行われるため、このような実装が可能になります。
hogehoge5.htmlの記述例
<tr>
<th>カスタムフィールド項目</th>
<td>
<input type="text" name="hoge" value="{hoge}" />
<input type="hidden" name="filed[]" value="hoge" />
</td>
</tr>
インクルードするファイルには、必要な項目だけ記述しておきましょう。増分のファイルには必要最低限の内容だけ含ませることで、共通部分の編集があったときにメンテナンス性が落ちてしまうことを防ぎます。
カテゴリーIDと関連づけたファイル名で実存のインクルード用ファイルを用意
特定カテゴリーでのみ成立する実存のファイル名
表示させたいカテゴリーのIDと、ファイルに含める番号を対応づけることで、必要なときだけファイルをインクルードして、カスタムフィールドの入力欄を追加することができます。
方法2の補足
対象のファイル名が存在しないときは?
インクルードのパスが存在しないファイル名になっているとき(他のカテゴリーにいるときなど)には、その記述は無視されるのでエラーが表示されることもありません。
ID推奨、コードは非推奨です
カテゴリーなどのコードと関連づけることで有意味なファイル名で管理することも可能ですが、コードは後から変更することが可能なので将来的な保守性を考えると、今回のような用途に適しているとは限りません。可能であれば、IDで管理したいところです。
このドキュメントと関連している内容のエントリー
- 関連度 2 : システムの処理順序
- 関連度 1 : カスタムフィールドグループの追加時に必要な記述
- 関連度 1 : Google Mapsに複数のエントリー情報をマッピングする
- 関連度 1 : カスタムフィールドでGoogle Mapsの入力インターフェースを実装する
- 関連度 1 : カスタムフィールドで画像をアップロードできるようにする
ドキュメントの内容に関するお知らせフォーム
内容に誤り・現行バージョンと異なる部分がありましたら、下記のフォームよりお知らせください。



