概要

Drupalのカスタムモジュールを用いて、コンテンツタイプとフィールドを追加する方法の備忘録です。

以下の2つの記事が参考になりました。

https://www.drupal.org/docs/drupal-apis/entity-api/creating-a-custom-content-type-in-drupal-8

https://www.digitalnadeem.com/drupal/how-to-create-content-type-fields-and-view-while-installing-custom-module-in-drupal-9-using-configuration-manager/

Car Brandの例

先に紹介した一つ目の記事の通り進めると、コンテンツタイプ「Car Brand」、フィールド「body」を追加することができました。

なお、上記の記事ではカスタムモジュールの作成の部分がスキップされています。まずはじめに以下のようなフォルダ、およびファイルを作成します。

ndptvcaeayeomscprreckese:ra:i_igovfpemneot:o:roidsboCu1ianul.or:se0nt_ormequirement:^8^9

独自のフィールドの追加

上記を参考に、コンテンツタイプを追加することができましたが、独自のフィールドを追加するには、Fieldに加えて、Field storageというものも追加する必要がありました。

このField storageのymlの記述方法がわからなかった際に、冒頭で紹介した2つ目のリンクである、以下の記事が参考になりました。

https://www.digitalnadeem.com/drupal/how-to-create-content-type-fields-and-view-while-installing-custom-module-in-drupal-9-using-configuration-manager/

モジュール「Configuration Manager」を使うことで、すでに登録済みのFieldやField storageの定義内容を確認することができました。

上記を踏まえて、IIIF Mediaというコンテンツタイプを作成して、iiif_image_urlという文字列を格納するフィールドと、iiif_image_widthとiiif_image_heightという数値を格納するフィールドを作成してみます。以下のようなファイルが必要です。

コンテンツタイプ

modules/custom/foobar/config/install/node.type.iiif_media.yml

#lsdntdhnpdateayeeerinnapempslwesogteneecp_vpdcunfm::r:rileosdooieea.d:erd-'ipvwytencuIiti__y:tcelfIiismsprideoIfoioueeue::oF_nodb.nesbm:nemi:aMe::iired'tidiCf1tf#iaoae_anldmT'ts:eheedintistrau.iteysympltehefonramIeIIoFfMtehdeiam'odulewe'reusingforthisexample

フィールド:iiif_image_url(string)

Field storage

modules/custom/foobar/config/install/field.storage.node.field_iiif_image_url.yml

lsdifetsmlctipcatedinyeooarneunape:etptmcidcradrsgtenlietaasukdnestcunfmndt:ixs_leisxioosdooo_yn_eaednlesmd:erd-dn_sgl_s::aast_encueattsesclt:_s:tcelf.myr:neicfiawtrideofepignioatb{ioeue::oi:ents:rlyltrnesbe:ghies:eha:alf:tfe:}_grdinia1ne_eo2vlto:ild5esr_ide5:euffi_eiafifel_ialsiildemfssa_e:giemf_aauglresl_eurl

なお、注意点として、dependencies > enforced > module > {モジュール名} を設定することで、アンイストール時に、当該storageも削除してくれるようです。これがないと、storageの情報だけ残ってしまいました。

以下の記事を参考にしました。

https://www.drupal.org/project/drupal/issues/3231028

!

一方、モジュールをアンイストールする際に、関連するコンテンツタイプやフィールドが削除されてしまうのは問題となる場合もあるため、これらの設定には注意が必要そうです。

Field

modules/custom/foobar/config/install/field.field.node.iiif_media.field_iiif_image_url.yml

#lsdifebldrtddsfatedinuaeereeeifnap:etnbsqaffteigtelidecunaatlecuncndtllrisuuidlosdoo_ye:irllln_dd:endn_:peattgt.enfeatItdt__syf:tci--.myiIi:avv:pirigiepiIobaaeeeue:fni:eiFnflll{:lnesioi:f:aeuud:edff_Il:ees.le_inmms:_}tnd.meoeaefcro.telddga{aidsyddeiellnetpi_aslg.oeaiUe}bir..iRaiaifiLcigiifkfeie_:_.flimn_dmeom_addeigiediea.ii_.fafufi_rieilelmldad_g_ieii_iiuifrf_l_iimmaaggee__uurrll.yml

フィールド:iiif_image_width(integer)

Field storage

modules/custom/foobar/config/install/field.storage.node.field_iiif_image_width.yml

lsdifetsmlctipcatedinyeooarneunape:etptusdcradrsgtenlietniukdnestcunfmndt:iszleisxioosdooo_ynieednlesmd:erd-dn_igg:::aast_encueatnsnlt:_s:tcelf.myt:encfiawtrideofepedooatb{ioeue::oi:eg:rrlyltrnesbe:emes:eha:alfrfae:}_grdinal1ne_eolto:ildsr_ideeuffi_eiafiel_ilsiidemfsa_:giemf_aawgliesd_etwhidth

Field

modules/custom/foobar/config/install/field.field.node.iiif_media.field_iiif_image_width.yml

#lsdifebldrtddsfatedinuaeereeeifnap:etnbsqafftmmpseigtelidecunaatiarulecuncndtllrisuuinxefdlosdoo_ye:irllln::ff_dd:endn_:peattgiit.enfeatItdt__snnxxyf:tci--.myiIi:avv:uu::pirigiepiIobaalleeeue:fni:eiFnflllll:lnesioi:f:aeuud:edff_Il:eei.le_inmms:_nnd.meoeaefcto.telddga{aedsyddeiellgetpi_asle.oeaiWe}brir..iiaiaifidcigiiftkfeie_h:_.flimn_dmeom_addeigiediea.ii_.fafwfi_iieidelmtldahd_g_ieii_iiwifif_d_itimhmaaggee__wwiiddtthh.yml

まとめ

結果、カスタムモジュール「foobar」をインストールすることにより、以下のように、IIIF Mediaというコンテンツタイプを作成し、Field typeが文字列と数字のフィールドを追加することができました。

カスタムモジュールを用いたコンテンツタイプとフィールドの追加に関して、参考になりましたら幸いです。