Drupalで集計用コントローラを作成する手順

  •  
 
MAXIMUM に投稿

タグ

イベント出欠有無など、何かしらの回答データを集計したりグラフ化したい場面が多いかと思います。
そういった場面用に今回はDrupalカスタムモジュールにて実装手順を説明していこうかと思います。

1.DB接続をする

先ずは下記のようにDBとの接続をします。
なおPHPを使用するため、コンストラクタ引数にそのまま定義して行数圧縮してます。
  public function __construct(protected Connection $database){}

次にシンフォニーコンテナからDB接続処理を取り出します。
DrupalはPHPの事実上標準であるシンフォニーフレームワークを内包しているためです。
  public static function create(ContainerInterface $container) {
   return new static(
     $container->get('database'),
   );
 }

2.集計結果画面の実装

長くなるのでソース自体は割愛しますが、手順としては下記になります。コメントアウト形式で書き留めておきます。
// event以外のノードIDでアクセスされた場合は処理しない
// 回答を新しい順にする
// 取得した回答を1件ずつ確認して参加有無で振り分け
// 全回答数を取得する
// DB値を画面表示用Drupal変数に入れ込む
// サーバから取ってくるためキャッシュを捨てる

3.グラフ表示と回答一覧の表示

集計したものをグラフ形式で表示したい場合はCSSを用意して読み込ませておけば可能です。
PHP側の例を出しておきます。
$build['#attached']['library'][] = 'event_manager/chart';
    $build['summary'] = [
     '#theme' => 'event_manager_chart',
     '#total' => $total,];

また一覧画面についてもDrupalの書き方に倣っていれば簡単に作成可能です。
具体的には$build['table']を使います。日本語を入れ込む際は->tを使うことで整合性が取れるようになりデフォルトエラーページ遷移回避可能です。

4.感想

なにかとブログなどにはこういった集計グラフ化したい事象が多くなるため、簡単に実装可能なのがDrupalの良いところだと思った。
また、これはシステム開発全般でそうですが、入力値が日本語の場合、受け取り側も日本語を指定していないとエラーになるというのが改修の際に難儀ではあった。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。