Weight

エンティティに重み(weight)フィールドを追加し、カスタムソートを可能にするモジュール

weight
36,213 sites
64
drupal.org

インストール

Drupal 11, 10, 9 v8.x-3.6
composer require 'drupal/weight:8.x-3.6'
Drupal 8 v8.x-3.4
composer require 'drupal/weight:8.x-3.4'

概要

Weightモジュールは、ノード、タクソノミーターム、ユーザーなど、あらゆるフィールド対応エンティティに追加できる「重み(Weight)」フィールドタイプを提供します。このフィールドは整数値をデータベースに保存し、コンテンツのカスタマイズされた並び替えを実現します。

Drupalのコア機能である重み付けの概念を拡張し、任意のエンティティタイプで利用可能にします。範囲(Range)設定により、例えば-20から20までの重み値を選択できるセレクトボックスが表示されます。軽い(小さい)重み値を持つコンテンツは上に、重い(大きい)値は下に表示されるのがDrupalの標準的な動作です。

Viewsモジュールとの統合により、管理画面上でドラッグ&ドロップによる並び替えが可能になり、テーブル形式のビューでコンテンツの順序を直感的に変更できます。変更は即座にデータベースに保存され、フロントエンドでのコンテンツ表示順序に反映されます。

Features

  • 任意のフィールド対応エンティティに追加可能な重みフィールドタイプを提供
  • 設定可能な範囲(Range)により、利用可能な重み値の幅を柔軟に設定可能(例:-20〜20)
  • Viewsとの完全統合により、テーブル表示でのドラッグ&ドロップ並び替えをサポート
  • Weight Selectorウィジェットでセレクトボックス形式の重み選択UIを提供
  • Drupal 7からの移行をサポートするマイグレーションプラグインを搭載
  • Feedsモジュールとの統合により、インポート時の重みフィールドマッピングが可能

Use Cases

ニュースサイトでの記事表示順カスタマイズ

トップページやカテゴリページに表示するニュース記事の順序を編集者が自由に制御できます。重要な記事に小さい重み値を設定することで、常に上位に表示させることが可能です。Viewsでfield_weightでソートするビューを作成し、管理画面ではドラッグ&ドロップで直感的に並び替えできます。

商品カタログの手動並び替え

ECサイトで商品の表示順序を手動で制御する際に使用します。売れ筋商品やおすすめ商品を上位に配置し、在庫切れ商品を下位に移動するなど、ビジネス要件に応じた柔軟な並び替えが可能です。

FAQやヘルプコンテンツの優先順位管理

よくある質問ページで、最も頻繁に参照される質問を上位に表示します。Weight値を設定することで、コンテンツの作成日時や更新日時に関係なく、任意の順序でコンテンツを表示できます。

メニュー的なコンテンツリストの管理

特定のコンテンツタイプ(例:サービス紹介、チームメンバー紹介)でメニュー並みの順序制御が必要な場合に使用。Drupalのメニュー重みと同様の概念で、コンテンツの表示順序を細かく管理できます。

タクソノミータームへの重み付け

分類用語(タクソノミーターム)にWeightフィールドを追加し、カテゴリ一覧の表示順序をカスタマイズします。コアのタクソノミー重み機能を補完または拡張する使い方が可能です。

Tips

  • Range値は実際の運用に合わせて設定してください。コンテンツ数が少ない場合は10程度、多い場合は50や100など大きめの値を設定すると良いでしょう。
  • Viewsでの一括編集には、必ずweight_selectorフィールドを使用してください。通常のweightフィールド表示では編集機能が利用できません。
  • 重み値0をデフォルトとして使用し、上位に表示したいコンテンツは負の値、下位に表示したいコンテンツは正の値を設定するのが一般的なパターンです。
  • グループ化されたViewsでも重み並び替えが機能します。各グループ内で独立してドラッグ&ドロップ操作が可能です。
  • Viewsの「行の重みを表示」ボタンをクリックすると、ドラッグ&ドロップ非対応のブラウザでもセレクトボックスで直接値を変更できます。

Technical Details

Hooks 3
hook_preprocess_views_view_table

Viewsのテーブル表示を前処理し、weight_selectorフィールドが存在する場合にtabledragを有効化します。行にdraggableクラスを追加し、ドラッグ&ドロップによる並び替えを実現します。

hook_field_views_data

重みフィールドのViewsデータを提供し、weight_selectorプラグインを自動的にフィールドに関連付けます。

hook_help

モジュールのヘルプページ(/admin/help/weight)で使い方の説明を表示します。

Troubleshooting 4
Viewsでドラッグ&ドロップが機能しない

Viewsの表示形式が「テーブル」に設定されていることを確認してください。ドラッグ&ドロップはテーブル形式でのみ機能します。また、JavaScriptが有効になっていることを確認してください。

重みフィールドがViewsのフィールド一覧に表示されない

Weightフィールドを追加したエンティティタイプのベーステーブル(例:node_field_data)を使用しているか確認してください。フィールドは「コンテンツ: [フィールド名] Selector」として表示されます。キャッシュをクリアすると解決する場合があります。

保存後も順序が変わらない

Viewsのソート条件でweightフィールドがASC(昇順)で設定されているか確認してください。他のソート条件がweightソートより優先されていると、期待した順序にならない場合があります。

Drupal 7からの移行時にフィールドデータが失われる

Migrateモジュールが有効になっていること、およびソースサイトでWeightモジュールが使用されていたことを確認してください。マイグレーションプラグインは自動的にフィールドタイプとフォーマッターをマッピングします。

Security Notes 2
  • 重みフィールドの編集権限は、エンティティの編集権限と連動しています。Viewsでの一括編集には、対象エンティティの編集権限が必要です。
  • このモジュールはDrupalセキュリティチームのカバレッジ対象(Security advisory coverage: covered)です。セキュリティ問題が発見された場合は、セキュリティアドバイザリが公開されます。