🌟

Drupalで他のコンテンツを参照する際に、IDとタイトルで探せるようにする

2023/10/31に公開

はじめに

例えば、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