Node Edit Protection

ユーザーがノード編集フォームから離れようとした際にブラウザの確認ダイアログを表示することで、未保存の変更が失われることを防止します。

node_edit_protection
5,694 sites
22
drupal.org

インストール

Drupal 11, 10, 9, 8 v8.x-1.2
composer require 'drupal/node_edit_protection:8.x-1.2'

概要

Node Edit Protectionは、Drupalのノードを編集する際にユーザーが誤って未保存の作業を失うことを防ぐためのシンプルながら不可欠なユーティリティモジュールです。ノード編集フォームでユーザーが変更を加えたことを自動的に検出し、保存せずにページを離れようとすると、ブラウザの確認ダイアログを表示します。

このモジュールは、すべてのノード編集フォームにJavaScriptビヘイビアをアタッチすることで動作します。フォームフィールドへのユーザー操作を追跡し、リンクのクリック、ブラウザの戻るボタンの使用、タブを閉じる操作、ページの更新など、ナビゲーションの試行を監視します。未保存の変更が検出されると、ブラウザは「未保存の作業がすべて失われます」という警告メッセージを表示します。

このモジュールにはCKEditorのサポートも組み込まれており、WYSIWYGエディタインスタンス内での変更も検出します。

Features

  • 設定なしですべてのノード編集フォームを自動的に保護
  • フォームフィールドの操作(blurイベント)を監視して未保存の変更を検出
  • 未保存の変更がある状態でページを離れようとすると、ブラウザの確認ダイアログを表示
  • 通常のフォーム送信時には警告をトリガーせずに送信可能
  • リンク、戻るボタン、ページ更新、タブを閉じるなど、さまざまなナビゲーション方法に対応
  • CKEditor統合機能を内蔵し、WYSIWYGエディタでの変更を検出
  • ユーザーに見える設定や管理インターフェースなしで透過的に動作
  • Drupal 8、9、10、11と互換

Use Cases

コンテンツ編集者を誤ったデータ損失から保護

長い記事や複雑なノードフォームで作業しているコンテンツ編集者は、管理ツールバーのリンクをクリックしたり、ブラウザの戻るボタンを使用したり、ブラウザタブを閉じたりすることで、誤って作業を失う可能性があります。Node Edit Protectionはこれらすべてのシナリオで警告ダイアログを表示し、編集者にナビゲーションをキャンセルして作業を保存する機会を与えます。

複数タブでの編集ワークフロー

複数のブラウザタブで頻繁に作業する編集者は、未保存の変更があるタブを誤って閉じてしまう可能性があります。このモジュールはタブを閉じる操作をインターセプトし、ユーザーに確認を求めることで、誤ったデータ損失を防止します。

トレーニング環境での保護

新しいDrupalユーザーがシステムを学んでいるトレーニング環境では、このモジュールはコンテンツを保存する前にページを離れてしまうといった一般的なミスに対する追加のセーフティネットを提供します。

Tips

  • モジュールは設定不要で自動的に動作します - インストールして有効化するだけです
  • 保護は特定のコンテンツタイプだけでなく、すべてのノード追加・編集フォームに適用されます
  • 警告メッセージはDrupalの標準的な翻訳インターフェースを通じて翻訳可能です
  • フォームの送信ボタンは警告のトリガーから自動的に除外されるため、通常の保存操作はシームレスに動作します
  • href='#'(ページ内アンカー)を持つリンクも、AJAX操作での誤検出を防ぐために除外されます

Technical Details

Hooks 1
hook_form_alter

すべてのノード追加・編集フォームを含む、'node-form' CSSクラスを持つすべてのフォームにnode_edit_protection JavaScriptライブラリをアタッチします。

Troubleshooting 3
ノード編集フォームを離れる際に警告ダイアログが表示されない

モジュールが有効になっていること、およびJavaScriptが正しく動作していることを確認してください。ブラウザコンソールで、モジュールの動作を妨げる可能性のあるJavaScriptエラーがないか確認してください。また、フォームに'node-form' CSSクラスがあることを確認してください。

変更を加えていないのに警告が表示される

モジュールはフォームフィールドのblurイベントを監視して変更を検出します。フィールドをクリックしてからクリックアウトすると、編集済みとしてマークされます。これは、変更を見逃さないようにするための仕様です。

CKEditorでの変更が検出されない

このモジュールはグローバルなCKEDITORオブジェクトをチェックするため、CKEditor(CKEditor 5ではなく)を使用していることを確認してください。CKEditor 5の場合、検出が期待どおりに機能しない可能性があります。