Media Entity File Replace
ファイルベースのメディアエンティティに関連付けられたソースファイルを、元のファイル名とパスを維持したまま置き換えることができます。
media_entity_file_replace
インストール
composer require 'drupal/media_entity_file_replace:8.x-1.3'
composer require 'drupal/media_entity_file_replace:8.x-1.2'
composer require 'drupal/media_entity_file_replace:8.x-1.0'
概要
Media Entity File Replaceは、URLを変更したり既存のリンクを壊したりすることなく、メディアエンティティに添付されたファイルを更新する必要があるコンテンツ編集者のための効率的なワークフローを提供します。ドキュメント、画像、音声ファイル、その他のファイルベースのメディアを更新する必要がある場合、このモジュールにより新しいファイルで既存のファイルを完全に上書きし、同じファイル名とファイルシステムパスを維持できます。
これは、ファイルが直接リンクで共有されている、メールに埋め込まれている、または印刷物で参照されているシナリオで特に価値があります。新しいファイルをアップロードする(新しいURLが作成される)代わりに、編集者はファイルの内容を置き換えながら、その他すべてを維持できます。
このモジュールは「ファイルを置換」フォームウィジェットをメディア編集フォームに追加し、フォーム表示設定を通じてメディアタイプごとに有効化できます。コンテンツ翻訳をインテリジェントに処理し、言語バージョン間で共有されているファイルの意図しない上書きを防止します。
Features
- ファイルベースのメディアタイプ(Document、Image、Audio、Videoなど)のメディアエンティティ編集フォームに「ファイルを置換」ウィジェットを追加
- 2つの置換モード:元のファイルを上書き(ファイル名とパスを維持)または置換ファイル名を使用(新しいファイル参照を作成)
- ウェブサーバーによる適切なMIMEタイプ処理を確保するため、上書き時に同じファイル拡張子を強制
- 画像ファイルが置き換えられると自動的にイメージスタイルの派生画像をフラッシュし、サムネイルとスタイル適用済み画像が再生成されることを保証
- コンテンツ翻訳をインテリジェントに処理 - デフォルト言語のファイルに影響を与える場合、置換ウィジェットの表示を防止
- ソースフィールドからアップロードバリデーター(ファイルサイズ制限、許可される拡張子)を継承し、ユーザーに表示
- 置換ウィジェットが有効な場合、標準ファイルウィジェットの「削除」と「アップロード」ボタンを非表示にし、ワークフローの競合を防止
- 処理前に置換ファイルがすべての元のフィールド要件を満たしていることを検証
- 適切なファイル使用追跡を維持 - 以前のリビジョンのみで参照されている古いファイルは自動的にクリーンアップ対象としてマーク
Use Cases
共有リンクを維持しながらPDFドキュメントを更新
ある会社には、メールで共有され、複数のウェブページからリンクされている製品カタログPDFがあります。カタログの新しいバージョンの準備ができたら、コンテンツ編集者はファイル置換ウィジェットを使用して新しいPDFをアップロードできます。「元のファイルを上書き」にチェックを入れることで、新しいコンテンツが古いファイルを置き換えながらまったく同じURLを維持するため、すべての既存リンクは引き続き機能し、訪問者は自動的に更新されたドキュメントを取得できます。
キャッシュを壊さずに製品画像を更新
ECサイトで製品写真を更新する必要があります。「元のファイルを上書き」にチェックを入れてファイル置換機能を使用すると、編集者は同じファイルパスを維持しながら画像を置き換えることができます。モジュールは自動的にイメージスタイルの派生画像をフラッシュし、サムネイルやその他のスタイル適用済みバージョンが新しい画像コンテンツで再生成されることを保証します。
ドキュメントを完全に新しいファイルに変更
ドキュメントをまったく別のものに置き換える場合(例:ドラフトを異なるファイル名の最終版に置き換える)、「元のファイルを上書き」オプションのチェックを外します。これにより、置換ファイルが新しいファイルとしてアップロードされ、メディアエンティティがそれを参照するように更新され、他のコンテンツが参照していない場合は古いファイルをクリーンアップできます。
言語ごとに別ファイルを持つ翻訳メディアの管理
ドキュメント翻訳が別ファイルとして保存されている多言語サイトでは、モジュールがインテリジェントに置換を処理します。メディアエンティティが異なるファイルを持つ翻訳を持っている場合、編集者は他の翻訳に影響を与えることなく、ある言語のファイルを安全に置き換えることができます。モジュールは、使用するとデフォルト言語のファイルを意図せず変更してしまう場合、置換ウィジェットの表示を防止します。
Tips
- 直感的な編集フローのために、「ファイルを置換」ウィジェットを標準のFileまたはImageウィジェットの直下にフォーム表示で配置してください
- 元のファイルを上書きする場合、置換ファイルは同じファイル拡張子を持つ必要があります(例:.pdfを.docxに置き換えることはできません)
- モジュールは元のフィールドのすべてのアップロードバリデーター(ファイルサイズ制限、許可される拡張子を含む)を尊重します
- ファイルタイプを変更する必要がある場合は、「元のファイルを上書き」のチェックを外して新しいファイルとしてアップロードしてください
- 画像メディアの場合、ファイルが置き換えられるとイメージスタイルの派生画像が自動的にフラッシュされ、次のリクエストで再生成されます
- 置換ウィジェットは既存のメディアを編集する場合のみ表示されます - まだ置き換えるものがないため、「メディアを追加」フォームでは非表示です
- ソースファイルがファイルシステムから削除されている場合、ファイルが再添付されるまで置換ウィジェットは表示されません
Technical Details
Admin Pages 1
/admin/structure/media/manage/{media_type}/form-display
メディアタイプのフォーム表示を設定し、ファイル置換ウィジェットを有効または無効にします。「ファイルを置換」疑似フィールドは、ファイルベースのメディアタイプ(File、Image、Audio、Videoソースプラグインを使用するもの)で利用可能なフォームコンポーネントのリストに表示されます。「無効」セクションからメインフォーム領域にドラッグして、そのメディアタイプのファイル置換機能を有効にします。
Hooks 3
hook_help
モジュールのヘルプページ用のヘルプテキストを提供し、ファイル置換機能の有効化と使用方法を説明します。
hook_entity_extra_field_info
すべてのファイルベースのメディアタイプのフォーム表示用に「replace_file」疑似フィールドを宣言します。この疑似フィールドにより、サイト構築者は標準のフォーム表示設定インターフェースを通じてファイル置換ウィジェットを有効または無効にできます。
hook_form_BASE_FORM_ID_alter (media_form)
設定時にファイル置換ウィジェットを追加するためにメディアエンティティ編集フォームを変更します。ファイルアップロードフィールドと置換動作を制御するチェックボックスを含むフィールドセットを追加します。また、カスタムバリデーションとサブミットハンドラーを追加し、標準ファイルウィジェットの削除/アップロードボタンを非表示にします。
Troubleshooting 5
フォーム表示設定でウィジェットを有効にしていることを確認してください。管理 > 構造 > メディアタイプ > [メディアタイプ] > フォーム表示の管理に移動し、「ファイルを置換」を無効セクションからコンテンツ領域にドラッグしてください。
これは想定される動作です。モジュールはファイルベースのメディアタイプ(File、Image、Audio、Documentソースプラグインを使用するもの)にのみ置換ウィジェットを追加します。Remote Videoは置き換えるファイルを持たないoEmbedソースを使用します。
元のファイルを上書きする場合、ウェブサーバーが正しいMIMEタイプを提供することを保証するため、置換ファイルは同じ拡張子を持つ必要があります。異なる拡張子のファイルをアップロードするには、「元のファイルを上書き」のチェックを外してください。
これは翻訳がデフォルト言語と同じファイルを使用している場合に意図的な動作です。ウィジェットを表示すると、すべての言語のファイルを置き換えるリスクがあります。まず翻訳用に別のファイルをアップロードしてください。その後、置換ウィジェットが表示されます。
「元のファイルを上書き」を使用する場合、同じファイルエンティティが保持され、その内容が置き換えられます。上書きしない場合、他のリビジョンがまだ参照している場合は古いファイルが残ります。ファイルは何も参照していない場合にのみcronによって削除されます。
Security Notes 3
- モジュールは既存のDrupalメディア権限に依存しています - ユーザーは置換機能にアクセスするために「メディアを管理」または適切なメディアタイプ編集権限が必要です
- ソースフィールドのファイルアップロードバリデーターが適用され、許可されていないファイルタイプのアップロードを防止します
- モジュールは新しい権限を導入しません - アクセスは標準のメディアエンティティアクセスによって制御されます