前の記事で、Link フィールドタイプがどう動作するかを見ました:Storage、Widget、Formatter。この記事では、2 つの異なる形式と設定を持つ、youtube から動画をページに出力するための独自のフィールドタイプを作ります。
この記事は Fields API に焦点を当てています。サイトに Youtube 動画フィールドを追加する必要がある場合は、既成のモジュールを使うほうが良いです:
https://www.drupal.org/project/video_embed_field
すべてのコードを github の drupalbook_youtube モジュールに追加しました。モジュールをダウンロードして、あなたのサイトに追加できます:
https://github.com/levmyshkin/drupalbook8
このモジュールのリストを見てみましょう。このタイプのフィールドがどう動作するかを説明してみます:
この記事では、フィールドの表示を編集してページに表示できる Field Formatters を検討します。
過去の記事で、Link フィールドタイプを作成しました。この記事では、これらのフィールドがページにどう表示されるか、そしてどのクラスがそれを担当するかを見ていきます。Drupal を通じて追加する各フィールドは、ページに表示でき、Manage display ページでその設定を編集できます。

Format 列で、フィールドの表示方法を選べます。この列は Field Formatter クラスによって形成されます。ページへのリンクを表示する Link モジュールのクラスを見てみましょう:
このチュートリアルでは、Link モジュールの Field Widget がどう動作するかを見ていきます。これは概説記事なので、独自の Field Widget を書き始めたい場合は、続く記事に進んでください。
前のレッスンでは、ノードとブロックに Link フィールドを追加しました。次に、Link フィールドのフォームが何によって形成されるかを見てみましょう。
Drupal での PHP クラスのオートロードにはすでに触れました。また、フィールド用の WidgetBase フィールドウィジェットクラスもあります:
core/lib/Drupal/Core/Field/WidgetBase.php
モジュールで新しい子クラスを作成し、それを src/Plugin/Field/FieldWidget に置くと、クラスが自動的に接続され、フィールドに使えます。Link フィールドのウィジェットクラスを見てみましょう:
core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
クラスのアノテーションには、このウィジェットが使えるフィールドタイプが含まれています:

この記事では、Drupal のフィールドがどう動作するか、なぜ必要なのか、そしてフィールドが Drupal でのサイト開発をどう素早くするのに役立つかを理解します。
前の記事ですでにフィールドを扱いました:
3rd party サービスへのアクセスは、dev と live のインスタンスで異なる必要があることが非常によくあります。構成を使ってこれを行うには、Configuration Split モジュールを使う必要があります:
https://www.drupal.org/project/config_split
Config Split モジュールを有効にすると、インスタンス用のフォルダーを指定できます。Configuration モジュールの Configuration Split 設定ページに移動しましょう:
/admin/config/development/configuration/config-split
ある サイトから別のサイトに構成をインポートするとき、コンテンツを出力するにはいくつかの構成が必要ですが、構成自体にはコンテンツが含まれていません。このチュートリアルでは、ブロック、ノード、タクソノミー用語をあるサイトから別のサイトに移す方法を説明します。
あるサイトでブロックを作成し、構成を別のサイトに移しましょう。あるサイトから別のサイトへ構成を移す方法は、前の記事 9.9. Drupal での構成の操作。Active、Sync 構成、DEV から LIVE への構成の移行 で見られます。Active、Sync 構成、DEV から LIVE への構成の移行。
Drupal の構成は、コンテンツタイプ、フィールド、構成フォーム、変数のすべての設定の基盤です。構成の助けを借りて、ある サイトから別のサイトへ変更を移したり、異なる機能を同時に、互いに干渉することなく開発したりできます。
構成は YML ファイルにアップロードして Git リポジトリに追加できるので、サイト設定の変更をコミットし、変更を Dev や Live に移せます。Drupal の構成のアイデアは、Features モジュールの動作方法に似ています:
https://www.drupal.org/project/features
ただし、features はすべてのモジュールと統合されているわけではなく、Features を通じてすべてのサイト設定を移すことが常に可能だったわけではありません。Drupal の構成はすべての設定で機能し、すべてをファイルにアップロードできます。
Drupal をインストールすると、構成をアップロードするためのフォルダーが作成されます。デフォルトでは、sites/default/files にある長い名前のフォルダーです:
この記事では、引き続き Drupal 8 の Form API を理解し、マルチステップフォームを作ります。すでにモジュール用の通常の構成フォームを作成しました。マルチステップフォームは、フォームのステップ間でデータを保存するために $form_state を使って、同様の方法で作成されます。
コード例は github で見られます:
https://github.com/levmyshkin/drupalbook8
マルチステップフォームには、フォームクラスを追加する必要があります:
/modules/custom/drupalbook/src/Form/MultiStepForm.php
前のレッスンの 1 つで、フックとは何かを学びました。このレッスンでは、hook_form_alter() フックを実際に扱い、既存のフォームに機能を追加します。
コード例は github で見られます:
https://github.com/levmyshkin/drupalbook8
このレッスンでは、フックを実際に見始めます。後でフックに戻り、他のいくつかの例を見ます。とりあえず、hook_form_alter() から始めましょう。
モジュールにフックを追加するには、MODULENAME.module という名前のファイルを作成する必要があります。ですから、drupalbook.module という名前のファイルを作成します。これは、私たちのフックと補助関数を保存する PHP ファイルになります。それ以外については、src フォルダーに別々のファイルとクラスを使うほうが良いです。とりあえず、ファイルには開始タグだけを追加できます。
このチュートリアルでは、Drupal Form API を扱い、モジュール用の設定フォームを作成します。すでにページとブロックを表示するモジュールを作成しました。次に、仮のサービスへの接続用のデータを保存する構成フォームを作成しましょう。例えば、Google Maps API のために、サイトに API Key と API Client ID を保存する必要があるとします。
コード例は github で見られます:
https://github.com/levmyshkin/drupalbook8
このデータを settings.php に保存し、これらの設定を git に追加することもできます。しかし、それは安全ではありません。サービスへのアクセス情報はデータベースに保存するほうが良いです。