Flag
ブックマーク、お気に入り、スパム報告など、ユーザー主導のコンテンツマーカーを実現するカスタマイズ可能なブーリアントグルフィールド(フラグ)を作成し、任意のEntityタイプに付与できます。
flag
インストール
composer require 'drupal/flag:^5.0'
概要
Flagモジュールを使用すると、サイト管理者はNode、Comment、User、またはカスタムEntityタイプを含む任意のDrupal Entityタイプに付与できる柔軟なブーリアントグルフィールド(「フラグ」と呼ばれる)を定義できます。適切な権限を持つユーザーはコンテンツにフラグを付けたり外したりでき、ユーザー主導のコンテンツ整理とインタラクションの豊かなエコシステムを構築できます。
デフォルトでは、フラグはユーザーごとに動作し、認証済みの各ユーザーが独自のフラグ付きコンテンツセットを維持します。これにより、ブックマーク、お気に入り、ウォッチリストなどの個人的な機能が可能になります。さらに、フラグは「グローバル」として設定することもでき、その場合フラグの状態はすべてのユーザー間で共有されます。これはコンテンツを注目または不適切としてマークする機能に便利です。
このモジュールは、フラグ付きコンテンツの表示とフィルタリングのための包括的なViews統合、拡張性のためのプラグインベースのアーキテクチャ、フラグ操作へのカスタム対応のためのイベント駆動フック、セッショントラッキングによる匿名ユーザーのフラグ付けサポートを提供します。FlagにはDrupal 6および7からの移行サポートも含まれており、既存のフラグ設定を簡単にアップグレードできます。
Features
- 任意のEntityタイプ(Node、Comment、User、カスタムEntity)に対して、設定可能なラベル、テキスト、動作を持つ無制限のカスタムフラグを作成
- ユーザーごとのフラグ付け(個人のブックマーク、お気に入り)またはグローバルフラグ付け(編集機能用にすべてのユーザー間で共有)
- 複数のリンクタイプ:AJAX駆動の即時トグル、確認フォーム、カスタムフィールド付きフィールド入力フォーム、またはページリロード
- フラグをEntityビューモードの疑似フィールドとして、Entity編集フォームのチェックボックスとして、またはコンテキストメニューに表示
- フラグ付きコンテンツのリストを構築するためのリレーションシップ、フィルター、ソート、フィールドを備えた完全なViews統合
- 各フラグに対してフラグ/フラグ解除権限を生成する動的権限システム(オプションで所有者ベースの権限も)
- カスタム統合のためにEntityがフラグ付け/フラグ解除されたときにイベントをディスパッチするイベント駆動アーキテクチャ
- カスタムテンプレートでフラグリンクとカウントをレンダリングするためのTwigテンプレート関数(flagcount、flaglink)
- セッションベースのトラッキングによる匿名ユーザーのフラグ付けサポート
- Views Bulk Operationsによる一括フラグ/フラグ解除操作のためのActionプラグイン統合
- Rules、自動メール、その他のToken対応モジュールで使用するための包括的なTokenサポート
- Drupal 6および7のFlagモジュールからの移行サポート
Use Cases
個人ブックマーク
ユーザーが後で読むためにコンテンツをブックマークできるようにします。Nodeに対して「bookmark」というユーザーごとのフラグを作成し、即時フィードバックのためにAJAXリンクタイプを使用します。現在のユーザーのブックマークでフィルタリングされたViewを構築して「マイブックマーク」ページを作成します。
コンテンツのお気に入り
ユーザーがお気に入りの記事、製品、またはメディアをマークできるお気に入りシステムを有効にします。flag countサブモジュールを使用して、各アイテムをお気に入りに追加したユーザー数を示す人気インジケータを表示します。
スパム/不正使用の報告
ユーザーが不適切なコンテンツにフラグを付けられる「スパムとして報告」フラグを作成します。誤報告を防ぐために確認フォームリンクタイプで設定します。Viewsを使用して、モデレーション用にフラグカウント順にソートされたフラグ付きコンテンツを表示する管理レポートを作成します。
編集用の注目コンテンツ
ホームページ特集用にコンテンツをマークするために「featured」というグローバルフラグを使用します。グローバルなので、どの編集者でも設定でき、状態は共有されます。このフラグでViewsをフィルタリングして、注目コンテンツセクションを動的に構成します。
ユーザーフォローシステム
flag_followerサブモジュールを有効にするか、ソーシャルフォロー用のカスタムUserフラグを作成します。ユーザーは他のユーザーをフォローでき、Viewsはユーザープロフィールに「フォロワー」と「フォロー中」のリストを表示できます。
ウィッシュリスト機能
ECサイト用に、商品コンテンツタイプに「wishlist」フラグを作成します。ユーザーがウィッシュリストに追加する際にメモや数量を追加できるようにフィールド入力リンクタイプを使用します。編集/削除機能を備えたViewsでウィッシュリストを表示します。
コンテンツ購読
ユーザーが通知用にコンテンツを購読できる「subscribe」フラグを作成します。flag.entity_flaggedイベントにフックして、購読コンテンツが更新されたときにメール通知をトリガーします。
投票/評価のプレースホルダー
Flag自体はブーリアンですが、シンプルな投票システムの基盤として機能できます。「upvote」と「downvote」フラグを作成し、Viewsやカスタムコードでフラグカウントを使用してスコアを計算します。
Tips
- 独自のフラグを作成する際は、flag_bookmarkサブモジュールをリファレンス実装として使用してください
- 高トラフィックサイトでは、キャッシュへの影響を考慮してください - コンテキストリンク表示は、フラグアクセス権を持つユーザーのEntityキャッシュを無効にします
- メモや評価などの追加データを収集するために、/admin/structure/flags/manage/[flag]/fieldsのField UIでフラグ付けにカスタムフィールドを追加してください
- 柔軟なフラグ表示のために、カスタムテンプレートでflagcount()およびflaglink() Twig関数を使用してください
- 通知や統計などのカスタム統合のために、flag.entity_flaggedとflag.entity_unflaggedイベントをサブスクライブしてください
- 匿名フラグはホスティング環境によって異なるPHPセッション処理に依存するため、十分にテストしてください
- 特定のフラグの外観をカスタマイズするために、テンプレートサジェスチョン(flag--[flag_id].html.twig)を使用してください
Technical Details
Admin Pages 7
/admin/structure/flags
サイトで設定されているすべてのフラグを一覧表示します。ここから管理者はフラグの表示、編集、有効化、無効化、リセット、削除ができます。一覧にはフラグ名、フラグタイプ(適用されるEntityタイプ)、適用されるBundle、グローバルステータス、利用可能な操作が表示されます。
/admin/structure/flags/add
フラグ作成の最初のステップ - このフラグが付与されるEntityタイプを選択します。選択後、完全なフラグ設定フォームに進みます。
/admin/structure/flags/add/{entity_type}
新しいフラグを作成するための完全なフラグ設定フォーム。識別、スコープ、メッセージ、アクセス制御、表示オプションを含むフラグのすべての側面を設定します。
/admin/structure/flags/manage/{flag}
既存のフラグの設定を変更します。追加フォームのすべての設定が編集可能です。
/admin/structure/flags/manage/{flag}/reset
このフラグのすべてのフラグ付けを削除します。このフラグに関連付けられたすべてのユーザーフラグデータが永久に削除されます。
/admin/structure/flags/manage/{flag}/enable
以前に無効化したフラグを再度有効化し、サイトで再びアクティブにします。
/admin/structure/flags/manage/{flag}/disable
フラグを削除せずに一時的に無効化します。無効化されたフラグはユーザーに表示されません。
権限 8
Hooks 4
hook_flag_type_info_alter
他のモジュールが提供するフラグタイププラグイン定義を変更します。MODULE.flag.incファイルに配置できます。
hook_flag_options_alter
フラグのデフォルトオプションを変更します。フラグ設定と一緒に保存されるカスタムオプションを追加するために使用します。
hook_flag_link_type_info_alter
アクションリンクタイププラグイン定義を変更します。MODULE.flag.incファイルに配置できます。
hook_flag_action_access
フラグアクションが試みられたときにカスタムアクセスチェックを実行します。許可、拒否、または中立を示すAccessResultオブジェクトを返します。
Troubleshooting 6
フラグが有効になっていること、ユーザーが「flag [flag_id]」権限を持っていること、フラグがコンテンツのBundleに適用されること、表示オプション(フィールドとして表示、リンクに表示)が設定されていることを確認してください。フィールド表示を使用している場合は表示管理設定を確認してください。
JavaScriptが有効であることを確認し、ブラウザコンソールでJSエラーを確認し、flag/flag.link_ajaxライブラリが読み込まれていることを確認してください。Drupalのキャッシュとブラウザキャッシュをクリアしてみてください。
匿名フラグにはセッションベースのトラッキングが必要です。PHPセッションが正しく動作していることを確認してください。匿名ロールがフラグ権限を持っていることを確認してください。ページキャッシュが匿名フラグに干渉する可能性があることに注意してください。
フラグカウントはFlagCountManagerイベントサブスクライバーによって維持されます。キャッシュをクリアし、イベントシステムが動作していることを確認してください。データの整合性について「flag_counts」データベーステーブルを確認してください。
Viewにフラグリレーションシップを追加し、正しいフラグを使用するように設定されていることを確認してください。「フラグ付きコンテンツのみを含む」が用途に応じて適切に設定されているか確認してください。
確認フォームまたはフィールド入力リンクタイプの場合、「フォームの動作」設定を確認してください。必要に応じて「新しいページ」、「ダイアログ」、または「モーダルダイアログ」を選択してください。
Security Notes 5
- 「administer flags」と「administer flaggings」権限は制限付きアクセスとしてマークされています - 信頼できる管理者にのみ付与してください
- フラグ権限は動的に生成されます - 新しいフラグを作成した後に権限を確認して、適切なアクセスを確保してください
- 匿名フラグは操作可能なセッションIDを使用します - セキュリティ上重要な機能には使用しないでください
- CSRF保護はすべてのフラグ/フラグ解除ルートに適用されます
- コンテキストリンク表示を使用する場合、キャッシュされたフラグ状態が表示されるのを防ぐため、フラグアクセス権を持つユーザーのEntityキャッシュが無効になります