Views Bulk Operations (VBO)
Views Bulk OperationsはDrupal Viewsを拡張し、選択したViewの行に対してアクションを実行できるようにします。行選択用のチェックボックスと、利用可能な操作のドロップダウン/ボタンを提供します。
views_bulk_operations
インストール
composer require 'drupal/views_bulk_operations:^4.4'
概要
Views Bulk Operations (VBO)は、DrupalのViewsモジュールを拡張し、View結果に表示されるEntityに対して一括操作を実行する機能を追加します。複数のアイテムを選択し、それらに対して同時にアクションを実行するための強力なインターフェースを提供します。
このモジュールは、表示された各行の前にチェックボックスを表示し、利用可能な操作を含むセレクトボックス(またはボタン)を表示します。ユーザーは個々のアイテムを選択したり、現在のページのすべてのアイテムを選択したり、すべてのページにわたるすべてのアイテムを選択したりできます。アクションは即座に処理することも、大規模なデータセットの場合はバッチ操作を通じて処理することもできます。
VBOはDrupalのコアActionプラグインシステムとシームレスに統合しながら、Views管理画面でのアクションの事前設定、確認ステップ、設定可能なバッチ処理、AJAXを使用した複数ページ選択追跡などの拡張機能を提供します。
Features
- アイテム選択用のチェックボックスを表示する「Views bulk operations」フィールドを任意のEntityビューに追加
- 選択したEntityに対する操作を実行するためのアクションドロップダウンまたはアクションボタンを提供
- 現在のページだけでなく、すべてのページにわたる「すべて選択」機能をサポート
- リアルタイムのカウント更新を伴うAJAXを使用した複数ページ選択追跡
- 大量のEntityを効率的に処理するためのバッチ処理をサポート
- 最適なパフォーマンスのための設定可能なバッチサイズ
- Views管理UIでのアクション事前設定 - アクション設定のデフォルト値を設定可能
- カスタマイズ可能なヘルプテキストを含む、アクション実行前のオプションの確認ステップ
- コアアクションと拡張機能を備えたカスタムVBOアクションの両方をサポート
- Entity/翻訳の削除アクションを内蔵
- 複数のキャンセル方法を持つユーザーアカウントキャンセルアクション
- コマンドラインからアクションを実行するためのDrushコマンド
- 他のモジュールがカスタムEntityビューを統合できるイベント駆動アーキテクチャ
- アクションのラベルとメッセージのオーバーライド機能
- 絞り込み条件変更時の選択クリアオプション
- 選択ボックスと全選択チェックボックスの柔軟な表示オプション
Use Cases
一括コンテンツモデレーション
VBOフィールドを持つ未公開コンテンツのViewを作成します。複数のNodeを選択し、「コンテンツを公開」アクションを使用して一度にすべてを公開します。実行前に選択を確認するための確認ステップを設定します。
大量ユーザーアカウント管理
登録日またはロールでフィルタリングされたユーザーアカウントのViewを作成します。「ユーザーアカウントをキャンセル」アクションを使用して、スパムアカウントや非アクティブユーザーを一括で無効化し、コンテンツを保持または削除するオプションがあります。
Drushによる自動コンテンツクリーンアップ
「drush vbo-execute」を使用してcronジョブを設定し、特定の日付より古いコンテンツを自動的に削除します。View引数と絞り込み条件を使用して、特定のコンテンツタイプや条件をターゲットにします。
多言語コンテンツの翻訳削除
コンテンツ翻訳のViewを表示し、VBOを使用してデフォルト言語のコンテンツを保持しながら、特定の言語の翻訳を選択的に削除します。
ビジネスロジック用のカスタム一括操作
ViewsBulkOperationsActionBaseを拡張したカスタムアクションプラグインを作成し、通知の送信、カスタムフィールドの更新、外部システムとの統合など、サイト固有のビジネスロジックを実装します。管理者定義のデフォルトには事前設定を、ユーザー入力には実行時設定を使用します。
ロール別の一括操作制限
Actions Permissionsサブモジュールを有効にして、きめ細かい権限を作成します。「execute [action] [entity_type]」権限を特定のロールに割り当て、コンテンツ編集者は公開はできるが削除はできず、管理者は完全なアクセス権を持つようにします。
Tips
- 50〜100以上のEntityに影響する操作には、タイムアウトを防ぐためにバッチ処理を使用してください
- 本番環境では、破壊的な操作を実行できるユーザーを制御するためにActions Permissionsサブモジュールを有効にしてください
- アクション事前設定を使用して、適切なデフォルトを設定し、ユーザーエラーを減らしてください
- Drushコマンドは自動化されたワークフローに強力です - スケジュールされた一括操作にはcronと組み合わせてください
- カスタムアクションを作成する場合、コンテキストとViewアクセスを含む完全なVBO機能サポートのためにViewsBulkOperationsActionBaseを拡張してください
- カスタムアクションを開発する際のテンプレートとしてサンプルモジュールを使用してください - 事前設定、設定、実行のパターンを示しています
- 非標準のView(Search APIなど)の場合、Entity型とゲッター情報を提供するためにViewsBulkOperationsEventサブスクライバーを実装してください
Technical Details
Admin Pages 3
/admin/structure/views/view/{view_id}
Viewの設定内でViews Bulk Operationsフィールドの設定を行います。ここで管理者は利用可能なアクションの選択、バッチ処理オプションの設定、UI設定を行います。
/views-bulk-operations/configure/{view_id}/{display_id}
設定可能なアクションが選択されたときに表示される設定フォーム。実行前にアクション固有のオプションを設定できます。
/views-bulk-operations/confirm/{view_id}/{display_id}
確認が必要な場合にアクションを実行する前に表示される確認ページ。
Hooks 1
hook_views_data_alter
VBO bulk formフィールドをすべてのEntity型Viewで利用可能なグローバルViewsフィールドとして登録します。
Drush Commands 2
drush views:bulk-operations:execute
指定されたViewのすべての結果に対してアクションを実行します。自動化された一括処理、cronジョブ、またはコマンドライン管理に便利です。
drush views:bulk-operations:list
利用可能なすべてのVBOアクションをID、ラベル、適用可能なEntity型とともにリストします。
Troubleshooting 6
VBOはViewsフィールドの「グローバル」カテゴリで利用できます。モジュールが有効になっていることを確認し、キャッシュをクリアしてください。VBOが機能するには、ViewがEntity型(コンテンツ、ユーザーなど)に基づいている必要があります。
チェックボックスを使用してアイテムを選択していることを確認してください。複数ページ選択を使用している場合は、AJAX更新が機能していることを確認してください(ブラウザコンソールでJavaScriptエラーを確認)。選択をクリアしてもう一度試してください。
VBOフィールド設定でバッチサイズを小さくしてください。デフォルトは10ですが、複雑なアクションにはより小さなバッチが必要な場合があります。PHPのmax_execution_timeとmemory_limit設定も確認してください。
アクションはEntity型でフィルタリングされます。アクションが型(例:「node」)を指定している場合、ユーザーViewには表示されません。また、Actions Permissionsサブモジュールが有効になっているかどうか、ユーザーが必要な権限を持っているかどうかを確認してください。
これは「絞り込み条件変更時に選択をクリア」が有効になっている(デフォルト)場合の期待される動作です。フィルター変更後も選択を維持するには、VBOフィールド設定でこのオプションを無効にしてください。
これは、Viewの基本テーブルがVBOが検出できるEntity型情報を提供していない場合に発生します。コントリビュートモジュールはVBOと統合するためにviews_bulk_operations.view_dataイベントを実装する必要があります。
Security Notes 5
- 本番環境では、破壊的な操作へのアクセスを制限するために常にActions Permissionsサブモジュールを有効にしてください
- 削除とユーザーキャンセルアクションは元に戻せない操作を実行します - 確認ステップの追加を検討してください
- VBO操作は現在のユーザーの権限で実行されます - 各操作の前にEntityアクセスチェックが実行されます
- Drushコマンドは指定されたユーザー(デフォルト: ユーザー1)として実行されます - Drushアクセスを適切に保護してください
- Entity削除時には監査ログが作成されます - 一括操作の追跡にはwatchdog/dblogを確認してください