Drupal8におけるブロック機能の改善とBlock Visibility Groupsモジュールについて

この記事は 「Block improvements in Drupal 8」 の翻訳です。

Drupal 7のブロックは非常に便利ですが、複雑なサイトではコアのブロック機能だけでは対応しきれない場面もありました。 Drupal8はDrupal7に比べて、コアのブロック機能がはるかに実用的で強力なものになりました。

Drupal8では以下の機能が新規に追加されました。

  • ブロックのエクスポート可能になりました
  • 一つのブロックを異なる複数のリージョンに配置することが可能になりました
  • ブロックにフィールドを設定する事が可能になりました

ここでは、これらの新機能とDrupal8のブロックシステムをより使いやすくする、Block Visibility Groupsモジュールについて詳しく見ていきましょう。

ブロックのエクスポートが可能になりました

Drupal8ではブロックをエクスポートできるようになりました。 Drupal 7では、ブロック設定はFeaturesモジュールを使用して出力可能ですが、この方法は必ずしも信頼できるとは限りません。 Drupal 8では、ブロック設定がコア設定ファイルに保存され、これらのファイルはgitなどの好きなコードリポジトリにチェックインできます。

D8のブロック構成ファイルの例

Drupal8のブロックのエクスポート

一つのブロックを異なる複数のリージョンに配置することが可能になりました

Drupal 8のもう一つの改良点としては、1つのブロックを複数のテーマリージョンに配置できることです。たとえば、Drupal 7のコアブロックでは、1つのブロックを複数のページにおいて、異なるリージョンに配置する事はできませんでした。これを実現するためには、PanelsContextモジュールを使用する必要がありました。

Drupal 8では、1つのブロックを複数のページにおいて、異なるリージョンに配置する(同一ページ内でも可能です)。では、どのように見えるか見てみましょう。「Help」ブロックが「Header」リージョンと「Highlighted」リージョンの2か所に配置されているのが確認できます。

2つの領域に配置されている「ヘルプ」ブロックの例

Drupal8では複数リージョンへのブロックの配置が可能

ブロックにフィールドを設定可能になりました

Drupal8ではブロックにフィールドを設定可能になりました。 Drupal 7ではブロックにフィールドを設定するにはBean(Blocks Entities Not Nodes)モジュールを使用する必要がありました。

Drupal8では、コンテンツタイプや、その他のフィールドを設定可能なエンティティと同じ方法でブロックにフィールドを追加できます。この機能はブロックの可能性を大幅に進化させます。それぞれのブロックタイプに独自のフィールドを追加する事で、用途に応じた様々なブロックが作成可能になります。例えば、リンクだけが表示されるブロックや、画像とテキスト広告のみが入ったブロックです。ブロックタイプの使用は構造化されたコンテンツの作成に非常に役立ちます。

Drupal8ではブロックにフィールドが設定可能

Block Visibility Groupsモジュールを利用するとブロックは更に便利になります

Drupal8のブロックシステムはBlock Visibility Groupsモジュールを利用すると更に便利になります。このモジュールを有効にすると、管理者はすべてのブロックがどこで表示されるかを分かりやすく管理できます。また、カスタムブロックのリビジョン管理も可能になります。

このモジュールは、Drupal 8でPanelsContextモジュールを利用するほどではない、比較的シンプルなサイトを作成する際にこれらのモジュールの代わりとして利用すると便利です。

Drupal8のBlock visibility group

この記事に対するANNAIのコメント

元記事では触れられていませんが、Drupal 8からはブロックもエンティティとなったため、ノードのようにカスタムブロックについてもリビジョン管理が可能になりました。これは公開前の承認や過去の更新の監査など、高度なワークフローなどを求められるサイトを構築する上で非常に大きな利点となります。

カスタムブロックにリビジョン機能が追加

カスタムブロックのリビジョンが利用可能

また、Drupal 7でよく利用されているPanelsContextモジュールは高機能な反面、設定が複雑な事もあり、利用する際のハードルが高いのが現状です。Block Visibility Groupsモジュールは既存のブロックシステムをベースに作動しますので初心者にはお勧めのモジュールです。

PanelsContextモジュールを利用すると、ユーザーロールや、権限、コンテンツタイプなど非常に多岐にわたる条件に応じて、レイアウトを個別に設定する事が可能です。複雑な条件分岐によって、レイアウトを変更したい場合にはこれらのモジュールの利用をお勧めします。