【第1回】Drupalカスタムモジュールのフォルダ構成
これから数回に分けてDrupalカスタムモジュール作成方法についての社員ブログを書いていこうかと思います。
先ずは、最初の一歩として大雑把にでもアーキテクチャの勉強から入っていこうかと思います。
それでは一般的なフォルダ構成です。
これから数回に分けてDrupalカスタムモジュール作成方法についての社員ブログを書いていこうかと思います。
先ずは、最初の一歩として大雑把にでもアーキテクチャの勉強から入っていこうかと思います。
それでは一般的なフォルダ構成です。
「あの話題、どこのチャンネルで話してたっけ……?」と、チャットツールの中を延々とさまよった経験は無いでしょうか。
弊社では社内チャットとして「RocketChat」を利用しています。RocketChat は、自前のサーバーでホストできるオープンソースのチャットツールとしては定番どころの一つで、Slack の代替として世界中で使われています(公式サイトによれば利用者は1,200万人以上)。ところがこの RocketChat、少なくとも私たちの環境では、Slack や Discord のような全チャンネルをまたぐ横断検索ができません。話題を探すには、チャンネルを一つずつ開いて検索して回ることになります。これが地味につらい。
イベント出欠有無など、何かしらの回答データを集計したりグラフ化したい場面が多いかと思います。
そういった場面用に今回はDrupalカスタムモジュールにて実装手順を説明していこうかと思います。
DrupalはFacebookが提唱したPHPのBigPipe技術を使ってHTMLページを生成しているようです。※似たようなものにAjaxがあります。
今回はそこに焦点を当ててみようかと思います。
先ずはWordPress等のよくあるブログ作成の場合どうなっているかを見ていきます。下記手順になります。
ユーザがページにアクセス
→PHPが上から順番にプログラムを実行し、ページの全HTMLをメモリ上に完成
→完成したHTMLを一括でブラウザに送信
このやり方だと、ページ内に1箇所でも重いデータがあると処理が終わるまで、ユーザーは待たされることになります。
今回はPHP小規模開発で用いられる関数のみでの書き方と、
大規模開発でよく使われるクラス化する書き方を比較していこうかと思います。
クラスを使う前に先ずはオブジェクトを作成します。
メモリには何も保存されていないため、このようにnewする作業が前段で必要になります。
中身は関数+データになります。
$today = new DateTime();
※DateTimeはPHP標準クラスのため宣言不要
流れとしてはこうなります。
DateTimeクラス
↓
DateTimeオブジェクト生成