このチュートリアルには、Drupal 8で独自のフィールドタイプ、ウィジェット、フォーマッターを作成するためのチュートリアルが含まれています。
パートV:Drupal 8の基本モジュール作成の実践ガイド
.infoからテストまで、基礎のみ
このレッスンの冒頭で、フォーム付きのブロックを定義すると言ったのを覚えていますか?さて、今がその時です。
ブロックインスタンスの設定を使用するには、HelloBlockクラスのbuild()メソッドを変更できます:
/**
* {@inheritdoc}
*/
public function build() {
$config = $this->getConfiguration();
if (!empty($config['hello_block_name'])) {
$name = $config['hello_block_name'];
}
else {
$name = $this->t('to no one');
}
return [
'#markup' => $this->t('Hello @name!', [
'@name' => $name,
]),
];
}
次のメソッドをHelloBlockクラスに追加します。この例ではファイルsrc/Plugin/Block/HelloBlock.phpにありますが、よりOOP的な思考に慣れてくると、ファイル構造内の物理的な場所は名前空間ほど重要ではないことがわかります。 非常に賢いOOプログラマーであれば、これら2つを密接に連携させておくでしょう。しかし、念のため言うと、これは実際には名前空間であり、モジュールのフォルダー名や、このセクションで以前にモジュールについて議論したマシン名に非常に似ており、後でモジュールのコードとプログラム的にやり取りしたいときに重要になります。
ここで、サイトビルダーがカスタムブロックの各インスタンスに設定の一部を入力できるようにしたいとしましょう。Drupal 8では、すべてのサイト構築設定を開発サイトからエクスポートして本番サイトにインポートできることに常に留意してください(設定の管理と呼ばれます)。モジュール開発者として、サイトビルダーが新しいブロックを作成するときにフォームに自動入力するデフォルト設定を提供することもできます。
前のページの既存のHelloBlockクラスに、既存のものに続いて次のuseステートメントを追加します:
use Drupal\Core\Block\BlockPluginInterface;
use Drupal\Core\Form\FormStateInterface;
BlockPluginInterfaceの実装を含むようにクラス宣言を更新します:
Drupal 8のブロックはブロックプラグインのインスタンスです。
Drupalのブロックマネージャーは、モジュール内の@Blockアノテーションを含むクラスをスキャンします。
以下のコード例では、@Blockアノテーションを「id」および「admin_label」プロパティとともに使用して、カスタムブロックを定義しています。
前に作成したモジュールスケルトンにsrc/Plugin/Block/HelloBlock.phpファイルを作成し、以下のコードを追加します。
Drupalサイトがこの新しいクラスを認識するには、キャッシュをクリアする必要があります。
Drupal 7とは異なり、サイトに配置するための複数のブロックインスタンスの作成は、Drupal 8では簡単な作業です。
このガイドでは、ブロックレイアウトインターフェースにブロックをプログラム的に追加する方法を学びます。ブロックに(管理)設定フォームを追加する方法と、その処理方法についても学びます。最後に、フォームにデフォルトの設定値を追加して表示する方法を学びます。
このステップバイステップガイドを始める前に、「モジュールのスケルトンを準備する」の手順に従ってモジュールスケルトンを準備してください。
Drupalで簡単なページを作成するには、2つのステップがあります:
パスとそのパラメーターを宣言します。
このステップには、ページのタイトル、ページへのアクセス要件などが含まれます。
Drupal 7では、hook_menu()を実装する必要がありました。
Drupal 8では、モジュールのトップレベルディレクトリに<module_name>.routing.ymlファイルを作成します。
ページの本文を返すコードを作成します。
Drupal 7では、hook_menu()で指定されたページコールバック関数を書く必要がありました。
Drupal 8では、ページコールバックはクラスのメソッドまたは登録されたサービスのいずれかである必要があります。さまざまな条件(HTTPまたはHTTPS、コンテンツヘッダーなど)によって異なる場合がありますが、これはこの入門の範囲外です。
メインテーマ:独自の設定の定義
他のモジュールの機能(コンテンツタイプ、ビュー、フィールド、テキスト形式など)に基づいて、デフォルト設定をモジュールに含めることができます。
たとえば、ノードモジュールはコンテンツタイプの設定を提供するため、自分のモジュールでは、モジュールに付属させたいデフォルトのコンテンツタイプを設定します。
独自のプラグイン、エンティティ、設定用の設定を定義したい場合があります。これらは、ノードのコンテンツタイプ設定を使用できるのと同様に、他のモジュールでも使用できます。Drupal 8では、独自の設定部分の定義が簡単になっています。
設定ファイル
モジュールの設定ファイルは、モジュールのconfig/installサブディレクトリにあります。つまり、モジュールが/modules/exampleにある場合、/modules/example/config/install/example.settings.ymlになります。ここに、YAMLファイル形式を使用してモジュールの設定ファイルを配置できます。
パートIV:Drupal 8の基本モジュール作成の実践ガイド
.infoからテストまで、基礎のみ
これまでのところかなりきれいですが、表示されるものをどのように変更できるでしょうか?もちろん、いくつかのフォームを使ってです。