Paragraph Blocks

Layout Builderで個々のParagraphフィールド値を独立したBlockとして配置できるようにします。

paragraph_blocks
3,170 sites
67
drupal.org

インストール

Drupal 11, 10 v4.1.7
composer require 'drupal/paragraph_blocks:^4.1'

概要

Paragraph Blocksモジュールは、複数値を持つParagraphフィールドの各値を個別のBlockとして配置できるようにすることで、DrupalのLayout Builder機能を拡張します。これにより、Paragraphsを使用したページレイアウト設計において強力な柔軟性を提供します。

このモジュールはParagraph Entityに「管理タイトル」フィールドを追加し、Layout BuilderでBlockを選択する際にParagraphを識別するために使用されます。これにより、特にエンティティごとのレイアウトオーバーライドを使用する場合に、複数のParagraphアイテムを簡単に区別できます。

主な機能には、Paragraphの並べ替えや削除時のLayout Builder設定の自動同期、保留中のリビジョン管理のためのContent Moderationとの統合、Paragraphs Libraryモジュールのサポート、動的な管理タイトル生成のためのTokenサポートが含まれます。

Features

  • Layout Builderで複数値Paragraphフィールドの各値を個別のBlockとして配置
  • Layout Builder UIでの識別のためにParagraph Entityに管理タイトルフィールドを追加
  • Paragraphの並べ替えや削除時にLayout BuilderのBlock設定を自動更新
  • エンティティタイプごとおよびエンティティごとのLayout Builder設定をサポート
  • 保留中のリビジョンとドラフトコンテンツをサポートするためにContent Moderationと統合
  • 再利用可能なParagraphアイテムのためのParagraphs Libraryモジュールをサポート
  • Tokenサポートによるパラグラフタイプごとのデフォルト管理タイトル設定が可能
  • Paragraphフィールドごとにパラグラフブロックの有効/無効を設定するオプションを提供
  • パラグラフブロック表示の最大カーディナリティを設定可能
  • Layout BuilderでのBlock配置時にラベルフィールドを非表示にするオプション

Use Cases

柔軟なランディングページの作成

パラグラフブロックを使用して、各セクション(ヒーロー、機能紹介、お客様の声など)が個別のParagraphとして作成され、Layout Builderを使用して異なるレイアウト領域に独立して配置できるランディングページを構築します。

ページごとのレイアウトカスタマイズ

Layout Builderの「各コンテンツアイテムのレイアウトをカスタマイズ可能にする」を有効にすると、編集者はインターフェースで各Paragraphを識別するための管理タイトルを使用して、各ページでパラグラフブロックを異なる配置にできます。

サイドバーコンテンツ管理

コンテンツタイプの同じParagraphフィールドで管理しながら、特定のParagraphアイテムをサイドバー領域に配置し、他のアイテムをメインコンテンツ領域に保持します。

コンテンツセクションのA/Bテスト

基礎となるコンテンツを変更せずに、Layout Builderでの配置を管理することで、異なるページ間で特定のParagraphセクションを簡単に再配置または非表示にできます。

Paragraphs Libraryを使った再利用可能なコンテンツ

Paragraphs Libraryモジュールと組み合わせて、単一の信頼できるソースを維持しながらLayout Builder経由で配置できる再利用可能なコンテンツブロックを作成します。

Tips

  • [paragraph:field_title]のようなTokenを使用してパラグラフタイプに意味のあるデフォルト管理タイトルを設定し、説明的なBlock名を自動生成しましょう
  • コンテンツ編集者のためにBlock配置インターフェースを効率化するには「ラベルフィールドを非表示」オプションを使用しましょう
  • 多くのパラグラフタイプがあるサイトでは、パフォーマンスを維持するために「UIで個別のパラグラフブロックを表示」を無効のままにしましょう
  • Content Moderationを使用する場合、パラグラフブロックはプレビューモードでドラフトコンテンツを含む最新のリビジョンを自動的に表示します
  • 管理タイトルフィールドは翻訳可能でリビジョン対応であり、多言語およびリビジョン対応ワークフローをサポートします

Technical Details

Admin Pages 1
Paragraph Blocks設定 /admin/config/content/paragraph_blocks

Paragraph Blocksモジュールのグローバル設定を行います。表示するパラグラフブロックの最大数やUI動作オプションなどを設定できます。

Hooks 8
hook_entity_base_field_info

Paragraph Entityに'admin_title'ベースフィールドを追加します。このフィールドはLayout BuilderでParagraphを識別するためのユーザー定義タイトルを保存します。

hook_plugin_filter_TYPE__CONSUMER_alter (layout_builder)

Layout Builderの「Block追加」インターフェースでパラグラフブロック定義のフィルタリングと再ラベル付けを行います。利用不可能なパラグラフブロックを削除し、管理ラベルを更新します。

hook_field_widget_info_alter

デフォルトのentity_reference_paragraphsウィジェットクラスをParagraphBlocksInlineParagraphsWidgetに置き換えて、管理タイトル表示動作をカスタマイズします。

hook_entity_type_alter

デフォルトのParagraph EntityクラスをParagraphBlocksEntityに置き換えて、管理タイトルサポートメソッドを追加します。

hook_form_field_config_edit_form_alter

Paragraphフィールド設定フォームに「Paragraph Blocksを有効化」チェックボックスを追加し、フィールドごとにパラグラフブロック機能を制御できるようにします。

hook_entity_presave

Paragraphフィールドを持つEntityが保存される際にLayout Builder設定を更新します。レイアウトの整合性を維持するためにParagraphの並べ替えと削除を処理します。

hook_form_paragraphs_type_form_alter

パラグラフタイプ設定フォームに「デフォルト管理タイトル」フィールドを追加します。動的タイトル生成のためにTokenパターンをサポートします。

hook_paragraph_create

パラグラフタイプの設定されたデフォルトに基づいて、新しく作成されたParagraphにデフォルト管理タイトルを設定します。

Troubleshooting 5
パラグラフブロックがLayout Builderに表示されない

フィールド設定でParagraphフィールドの「Paragraph Blocksを有効化」がチェックされていることを確認し、max_cardinality設定が十分に高いことを確認し、エンティティタイプでLayout Builderが有効になっていることを確認してください。

Blockが多すぎてUIが煩雑になる

「UIで個別のパラグラフブロックを表示」を無効(デフォルト)のままにし、適切なmax_cardinality値を使用してください。モジュールは自動的にフィルタリングして関連するBlockのみを表示します。

Paragraphの並べ替え後にレイアウトが壊れる

モジュールは保存時に自動的にBlock設定を更新するはずです。問題が続く場合は、hook_entity_presaveが正しく発火しているか、Entityが同期中(Workspaces)でないかを確認してください。

管理タイトルにTokenが表示されない

Tokenモジュールがインストールされ有効になっていることを確認してください。Tokenパターンは、Tokenが利用可能な場合にのみ処理されます。

ネストされたParagraphに管理タイトルフィールドが表示される

これは想定された動作です。トップレベルのParagraphのみがBlockとして使用されるため、ネストされたParagraphでは管理タイトルは自動的に非表示になります。

Security Notes 2
  • このモジュールは設定へのアクセスに「administer paragraphs settings」権限が必要です
  • 標準的なDrupalのフィールドおよびEntityアクセス制御以外の追加のセキュリティ上の懸念はありません