Drupalで他のコンテンツを参照する際に、IDとタイトルで探せるようにする
はじめに
例えば、Drupalで「組織」というコンテンツタイプを作成し、「東京大学」「京都大学」というコンテンツを作成します。
この時、Research Organization Registry (ROR)を使用して、以下のIDも登録したとします。
タイトル | ID |
---|---|
東京大学 | 057zh3y96 |
京都大学 | 02kpeqv85 |
このコンテンツを他のコンテンツ(例えば、「研究者」コンテンツタイプ)からaffiliation
フィールドを使って参照してみます。この時、以下のように大学
と入力すると、登録済みの2件のコンテンツが表示されます。
一方、IDの一部である057
などを入力しても、登録済みのコンテンツが表示されません。
そこで、本記事では、タイトルに加えて、他のフィールドでもコンテンツを探せるようにすることを目指します。
方法
ビューの作成
Drupalにログイン後、以下のURLにアクセスし、ビューを追加します。
/admin/structure/views/add
ここでは、ビューの基本情報として、「組織」「organization」を与え、ビューの設定として、コンテンツのタイプを「組織」に限定しています。
次の画面に遷移後、まず以下のように「+追加」ボタンを押し、「エンティティ参照」を選択します。
以下のように、メッセージが表示されます。
ディスプレイ "エンティティ参照" が正しく動作するには、選択した検索フィールドが必要です。エンティティ参照リストのフォーマット設定を確認してください。
このメッセージに対応するには、フォーマット
> フォーマット
> 設定
を押して、以下のように、検索フィールド
にチェックを入れる必要がありました。
この結果、以下のように、タイトルが表示されます。
IDフィールドの追加
次に、IDフィールドを追加します。
フィールド
> 追加
から、追加したいフィールド(ここではID
)を追加します。
次に、フォーマット
> フォーマット
> 設定
から、ID
にもチェックを入れます。
結果、以下のように、タイトルとIDのペアで表示されるようになりました。
フィールド
> 並び替え
で順番を入れ替えてみます。
結果、以下のように、IDが先頭にくるようになりました。
IDの場合、昇順で並べるケースが考えられるため、ここでも並び順を変更してみます。具体的には、並び替え基準
でID
フィールドを追加して、昇順
にします。
また、デフォルトで登録済みであったコンテンツ: 投稿日時
を削除します。
結果、以下のように、IDの昇順でエンティティ参照が並ぶようになりました。(ここでは、画面上は変化がありません。)
そして「保存」ボタンを押して、設定を保存します。
フィールド管理への反映
作成したビューをフィールド管理に反映してみます。まず、以下のコンテンツタイプの一覧ページにアクセスします。
/admin/structure/types
そしてここでは「研究者」を選択します。以下のように、コンテンツタイプ「研究者」で定義済みのフィールドが表示されます。ここで、「affiliation」フィールドの編集ボタンを押します。
そして、参照タイプの設定箇所で「参照方法」を「Views: エンティティ参照ビューによるフィルター」に設定し、「エンティティの選択に使用するビュー」を今回作成した「organization - エンティティ参照」に設定します。
そして、「設定の保存」を押します。
コンテンツの編集を試す
改めてコンテンツの編集画面でaffiliationフィールドにIDの一部を入力してみると、今回は登録済みのコンテンツが参照できるようになりました。
登録後は、以下のように表示されます。
まとめ
より良い方法が他にあるかもしれませんが、参考になりましたら幸いです。
Discussion