シックス・アパートの高山です。いえば、コンテンツタイプです。これまでの記事やウェブページにカスタムフィールドを加えるような感覚でありながら、まったく新しいコンテンツ構造をいちから設計できる機能になります。端的に説明すると、以下のような特徴を持っています。コンテンツタイプには、自由にコンテンツの名称を付けられます。「記事」や「ウェブページ」という用語を読み替える、或いは管理画面をカスタマイズしてラベルを変更する。いったことが必要ありません。「本文」や「タイトル」といった、システムから提供する(押し付ける)フィールドは一つもありません。(データ識別ラベルをユーザー入力とした場合を除く)すべてのフィールドを自由に設計できます。カスタムフィールドで利用できるフィールドの種類以上に利用できるフィールドの種類が存在します。コンテンツタイプ同士をリンクすることができるので、関連するコンテンツや使い回しができる情報を別のコンテンツタイプとして作成・管理することができます。これにより、様々な場所で利用されている共通の情報を更新するとき、利用しているコンテンツを検索、編集することなく、一つのコンテンツを編集するだけで済ませることができます。いえばプラグインによる機能拡張(自由度高め)が特徴的ですが、コンテンツタイプのフィールドの種類(以後フィールドタイプと呼びます)を増やすことももちろんプラグインでできます。この記事では、フィールドタイプを追加する方法について説明します。(ようやく本題にはいります。)新しいフィールドタイプを登録するフィールドタイプを追加するには、「content_field_types」というレジストリにフィールドの定義を追加する必要があります。タグ)を追加しますので、「content_field_types」の下に「description_list」というキーで登録します。このキー名がコンテンツデータのの中でも利用されますので、カブりは禁止です。例によってテクニカルサポート非対応にはなりますが、ご利用ください。(将来的にはコアに取り込むかも)すべての定義を記入したものがこちらです。value_labelレジストリの登録内容それぞの内容について解説します。labelコンテンツタイプの編集画面で表示されるフィールドタイプ名です。自動翻訳の対象となります。data_typeデータベースにデータを格納する際のデータ型を指定します。今回は、説明文が長くなったりすることを考慮して「text」とします。それ以外にも、「varchar」や「integer」などが利用できます。orderコンテンツタイプ編集画面のフィールド一覧におけるフィールドの表示順です。刻みで定義されています。既存のフィールドタイプの間や先頭に表示したいという場合は、この値で調整します。icon_classコンテンツタイプ編集画面のフィールド一覧におけるフィールドのアイコンを指定します。指定すると、コンテンツタイプの編集画面でデータ識別ラベルとして利用するフィールドの選択に登場します。data_load_handlerコンテンツデータ入力画面から、フィールドの値を取得するハンドラーを登録します。field_htmlコンテンツデータ編集画面で表示されるフィールドのテンプレートを指定します。利用するテンプレート変数を仕込むためのハンドラーを指定します。タグの結果を返すハンドラーを指定します。指定がない場合は、入力された値をそのまま利用します。タグのハンドラーを指定します。タグのコンテクストを変更する場合に指定します。今回は、複数の説明が存在する可能性があるので指定します。feed_value_handlerコンテンツデータの一覧から取得できるコンテンツデータフィードに表示する内容を出力するためのハンドラーを指定します。指定がない場合は、入力された値をそのまま利用します。preview_handler個別アーカイブが存在しないときにデータのプレビューをおこなうと、フィールドのラベルと入力データを簡易的に表示しています。このときの内容を出力するためのハンドラーを指定します。指定がない場合は、入力された値をそのまま利用します。とき、実際の価の置換処理をおこなうハンドラーを登録します。search_handler検索と置換、コンテンツデータ検索などの際に実際の検索処理をおこなうハンドラーを登録します。list_propsコンテンツデータ一覧におけるフィールドの出力に関して設定します。詳しくはリスティングフレームワークの解説を御覧ください。今回は、値が特殊であるため一覧には表しませんoptions_htmlコンテンツタイプ編集画面において、コンテンツフィールドの設定内容を表示するためのテンプレートを指定します。<.dd>optionsコンテンツフィールドのオプション情報として利用可能なものを列挙します。ついては、必ず定義する必要があります。今回は、新しいオプションとして、データ編集画面で表示する際のラベルを指定するようにしました。上記以外にも、いくつかの項目が存在しますが、今回は利用しません。詳しくは以下をご覧ください。ss_validatorコンテンツデータ編集画面において、サーバーサイドの入力検証処理をおこなうハンドラーを登録します。必須チェックは共通で処理されるため記述する必要はありません。site_data_import_handlerデータインポートにおいて、特殊な処理をおこなう必要がある場合にハンドラーを指定します。site_import_handlerデータインポートにおいて、特殊な処理をおこなう必要がある場合にハンドラーを指定します。theme_import_handlerテーマの適用時に特殊な処理を行う必要がある場合にハンドラーを指定します。theme_export_handlerテーマのエクスポート時に特殊な処理を行う必要がある場合にハンドラーを指定します。options_validation_handlerコンテンツタイプ編集画面において、入力されたオプションの値を検証するためのハンドラーを指定します。options_pre_save_handlerコンテンツタイプ編集画面において、入力されたオプションの値を保存する直前に呼び出されるハンドラーを指定します。search_class他のオブジェクトへのリンクを保持するタイプのフィールドのとき、検索を実行するときに実際に検索する対象となるオブジェクトのクラス名を指定します。search_columns他のオブジェクトへのリンクを保持するタイプのフィールドのとき、検索を実行するときに実際に検索する対象となるオブジェクトのフィールド名を列挙します。各種ハンドラーについて登録するハンドラーについて、実際のコードを交えながら説明します。取得したユーザーからの入力値を返す。値となるハッシュ値を返す。タグには定義されていないモディファイアを利用することもできる。生成する役割があります。これは、新規作成時にデータを受け付ける方法や、既存データの表示を行なうことを意味します。今回の例では、説明リストのタイトルと内容を入力するためのふたつのフィールドを用意します。複数の内容を登録できるようにするため、その組み合わせを任意に増やしたり減らす仕組みも用意します。順番を変更できるように並び替えについても実装しています。サンプルコードかなり長くなりますが、今回のテンプレートは以下のようになっています。コンテンツフィルドのオプション設定について記述したテンプレートを用意します。モディファイアにフィールドタイプのキー名を指定します。</mt:app:ContentFieldOptionGroup>独自に追加するオプションが存在しない場合でもテンプレートは用意する必要があります。type="description_list"></mt:app:ContentFieldOptionGroup>実際に使ってみる今回作成したコンテンツフィールドを早速使ってみましょう。コンテンツタイプの編集コンテンツタイプを新規に作成して、今回作成したフィールドを追加してみましょう。今回のコンテンツタイプは、レシピ集です。(サンプルは伝統的にレシピとなっているとかなっていないとか)フィールドを追加して、タイトルと説明のラベルを設定します。コンテンツデータを作成するでは、さっそくレシピを登録しましょう。アーカイブテンプレートを作成する折角なので、データを出力する方法にも触れておきましょう。今回の説明リストの内容を出力するには、以下のようなテンプレートを記述します。</mt:ContentFieldFooter></mt:ContentField>カスタムフィールドとは違い、個々のコンテンツフィールドについて新しいタグを覚える必要はありません。新しく追加したフィールドタイプですが、他のフィールドと使い方は同じですね。タグに新しいモディファイアを追加していて、タイトルか説明かを指定しているという点です。これは「field_value_handler」のサンプルコードに書いてある内容ですね。他のフィールドについてもテンプレートを記述して再構築をするとこんなページが出来上がります。地図など、あると便利なフィールドタイプはまだまだあると思います。コアやプラグインなどでも増やしていくことは検討しますが、プラグインがかける皆さまに於かれましては、ぜひ新しいフィールドタイプを作成し、是非プラグインディレクトリで公開してください。救われる人がいるかもしれません。蝦夷のジャクスタポジション・西山さん、ありがとうございます。参加してくださった全国のコミュニティーメンバーの皆さん。ありがとうございました。ニューリリースを(切実に)心待ちにしてくださっている皆さん。年内と申し上げていながら年明けのリリースとなり、ご迷惑をおかけしております・・・。その分、しっかりとした品質のものに仕上げってきていると感じています。ベータ版を公開しています。あのバグどうなったかな?あの機能はどうなる?など、いち早くご確認いただけます。ベータ版のフィードバックは年内いっぱい程度で一旦打ち切りとさせていただきますが、もし、あれ直ってないよ!というものがございましたら、フィードバックフォームよりお問い合わせください。