Paragraphs Edit
Paragraphsで作成したパラグラフに対して、コンテキストリンクから直接編集・複製・削除ができるモジュールです。
paragraphs_edit
インストール
composer require 'drupal/paragraphs_edit:^3.0'
概要
Paragraphs Editモジュールは、Drupalのコンテンツ管理を強化するモジュールです。Paragraphsモジュールで作成されたパラグラフエンティティに対して、コンテキストリンク(歯車アイコン)から直接アクセスできる編集・複製・削除機能を提供します。
通常、パラグラフを編集するには親エンティティ(ノードなど)の編集ページに移動する必要がありますが、このモジュールを使用すると、フロントエンドでコンテンツを閲覧しながら、各パラグラフの横に表示されるコンテキストリンクから直接操作が可能になります。これにより、コンテンツ編集者のワークフローが大幅に改善されます。
ネストしたパラグラフ(パラグラフ内のパラグラフ)にも対応しており、複雑な構造のコンテンツでも適切なリビジョン管理を行いながら編集できます。また、多言語サイトでの翻訳ワークフローもサポートしています。
Features
- コンテキストリンクによるパラグラフの直接編集:親エンティティの編集ページに移動することなく、フロントエンドから直接パラグラフを編集できます
- パラグラフの複製(クローン)機能:既存のパラグラフを別のエンティティやフィールドにコピーできます。複製先のエンティティタイプ、バンドル、親エンティティ、フィールドを選択可能です
- パラグラフの削除機能:確認画面付きで安全にパラグラフを削除できます
- 自動リビジョン管理:親エンティティのリビジョン設定に従い、編集時に新しいリビジョンを自動作成します。ネストしたパラグラフの場合は、すべての親階層のリビジョンも適切に更新されます
- リネージ(系統)表示:編集・削除・複製の各フォームで、パラグラフの完全なパス(親エンティティ名 > フィールド名 #番号 (パラグラフタイプ))が表示され、どのパラグラフを操作しているか明確にわかります
- 多言語サポート:content_translationモジュールと連携し、翻訳の作成・編集に対応しています
Use Cases
コンテンツ編集者による直感的なページ編集
ランディングページやマーケティングページなど、複数のパラグラフで構成されたページを編集する場合、従来はノード編集ページに移動して目的のパラグラフを探す必要がありました。Paragraphs Editを使用すると、公開ページを閲覧しながらコンテキストリンクから直接パラグラフを編集できます。例えば、ヒーローセクションのテキストを修正したい場合、そのセクションにカーソルを合わせて歯車アイコンをクリックし、「Edit paragraph」を選択するだけで編集フォームが開きます。
コンテンツの再利用(クローン機能)
あるページで作成した複雑なパラグラフ(画像ギャラリーやFAQセクションなど)を別のページでも使いたい場合、クローン機能が便利です。元のパラグラフのコンテキストリンクから「Clone paragraph」を選択し、複製先のノードとフィールドを指定するだけで、同じ内容のパラグラフが追加されます。複製時に内容を編集することもできるため、ベースとなる構造をコピーして少しだけ変更するという使い方も可能です。
不要なコンテンツブロックの削除
ページ上の特定のセクションが不要になった場合、コンテキストリンクから「Delete paragraph」を選択して削除できます。削除前に確認画面が表示されるため、誤操作を防げます。削除操作は親エンティティのリビジョン設定に従って記録されるため、必要に応じて以前のバージョンに戻すことも可能です。
ネストしたパラグラフの編集
タブコンポーネントやアコーディオンなど、パラグラフ内にパラグラフを含む複雑な構造でも、Paragraphs Editは正しく動作します。子パラグラフを編集すると、すべての親階層のリビジョンが適切に更新されます。編集フォームのタイトルには「ノード名 > 親パラグラフフィールド #1 (タブ) > 子パラグラフフィールド #2 (テキスト)」のようなリネージが表示されるため、どのパラグラフを編集しているか常に把握できます。
多言語サイトでの翻訳編集
多言語サイトでパラグラフの翻訳を編集する場合、現在の言語コンテキストに基づいて適切な翻訳版が編集対象になります。翻訳がまだ存在しない場合は、ソース言語の内容をベースに新しい翻訳が自動的に作成されます。これにより、翻訳者は複雑な翻訳管理画面を経由せずに、フロントエンドから直接翻訳作業ができます。
Tips
- Contextualモジュールのツールバーアイコン(鉛筆マーク)をクリックして、コンテキストリンク表示モードを有効にすると、すべてのパラグラフに歯車アイコンが表示されて操作しやすくなります
- クローン機能は同じパラグラフタイプ間でのみ動作します。異なるパラグラフタイプへの変換には対応していません
- ネストしたパラグラフを多用するサイトでは、リネージ表示が長くなることがあります。フォームタイトルでパラグラフの位置を確認できるため、誤編集を防げます
Technical Details
Admin Pages 3
/paragraphs_edit/{root_parent_type}/{root_parent}/paragraphs/{paragraph}/edit
パラグラフを直接編集するためのフォームです。コンテキストリンクから「Edit paragraph」を選択するとこのページに遷移します。フォームのタイトルには編集対象のパラグラフのリネージ(系統パス)が表示されます。
/paragraphs_edit/{root_parent_type}/{root_parent}/paragraphs/{paragraph}/clone
パラグラフを別のエンティティやフィールドに複製するためのフォームです。複製元のパラグラフの内容をコピーし、指定した宛先に新しいパラグラフとして追加します。
/paragraphs_edit/{root_parent_type}/{root_parent}/paragraphs/{paragraph}/delete
パラグラフを削除するための確認フォームです。削除を実行すると、親エンティティから該当パラグラフの参照が削除され、適切にリビジョンが作成されます。
Hooks 4
hook_entity_type_build
paragraphエンティティタイプに編集・複製・削除用のフォームクラスを登録します
hook_ENTITY_TYPE_view_alter (paragraph)
パラグラフの表示時にコンテキストリンクを追加します。QuickEditフォームコンテキストや管理ルートでは追加されません
hook_preprocess_paragraph
パラグラフテンプレートのプリプロセスでコンテキストリンクをコンテンツ配列に移動します。標準のパラグラフテンプレートはtitle_suffixを出力しないため、この処理が必要です
hook_ENTITY_TYPE_prepare_form (paragraph)
パラグラフ編集フォームの準備時に翻訳処理を行います。content_translationモジュールが有効で、現在の言語の翻訳が存在しない場合、ホストエンティティのソース言語から翻訳を作成します
Troubleshooting 4
以下を確認してください: 1) ユーザーに「Use contextual links」権限があるか 2) ユーザーに対象エンティティの更新権限があるか 3) パラグラフが管理画面ではなくフロントエンドで表示されているか 4) パラグラフフォームのEdit modeがPreviewになっている管理画面では表示されません
親エンティティのバンドル設定(コンテンツタイプ設定など)で「Create new revision」がオフになっている可能性があります。リビジョンを自動作成するには、親エンティティのバンドル設定でリビジョン作成を有効にしてください
クローン機能は、対象のパラグラフタイプを受け入れるEntity Reference Revisionsフィールドを持つエンティティのみを複製先として表示します。目的のエンティティが表示されない場合は、そのエンティティのフィールド設定で、対象のパラグラフタイプが許可されているか確認してください
これは意図された動作です。QuickEditとの競合を避けるため、QuickEditフォームコンテキストではParagraphs Editのコンテキストリンクは表示されません
Security Notes 3
- 編集・削除操作は親エンティティの更新権限に基づいてアクセス制御されます。パラグラフ自体には個別のアクセス制御はありません
- クローン操作では、複製先エンティティとフィールドの両方に対する編集権限がバリデーションされます
- このモジュールはDrupal.orgのセキュリティカバレッジ対象です