【Pigeon Framework】Hook機能で高度なカスタマイズ

「テーブルごとに他のHTMLを表示させたいな」

「データが編集・追加されたら、通知とかされたらいいのに…」

「テーブルに無い情報を追加で入れたいな~」

この記事では、このような高度なカスタマイズを実現させるHook機能について紹介していきます。楽しみにしていてくださいね。
  

そもそもHook機能ってなに?

そもそも、Hook機能の意味がわからない方のために、説明しておくと、
 

フック(Hook)は、プログラム中の特定の箇所に、利用者が独自の処理を追加できるようにする仕組みである。また、フックを利用して独自の処理を追加することを「フックする」という。

参照:Wikipedia

 
つまり、

「何かしらの操作の前や後に、独自に処理を付け加えること」です!

では、Pigeon Framework におけるHook機能にはどのようなものがあるのか、ご紹介していきます。
 

Hook機能を使ってより便利にしてみよう!

Hook機能の基本的な使い方

Hook機能を使うには、ドキュメントルートに “custom” フォルダーを作り、その中にHook内容を記述した「任意の」名前のファイルを作成すればOKです。

筆者の環境であれば、” /var/www/html/custom ” のような感じです。

 

詳細画面にHTMLを追加

まずは、詳細画面に単純なHTMLを追加で加えてみましょう。

詳細画面にHTMLを追加するには、

筆者の環境であれば、” /var/www/html/custom/sample.php ” に

<?php
$menugroup = MenuGroup::getMenuInstance('pf_admin');   //ユーザーテーブル名を入れてインスタンスを取得
$menugroup->addBeforeHtml('characters','list',function(){
  return <<<DOC_END
<div style="font-size:20px">キャラクター一覧画面</div>
DOC_END;
});    //Hookの内容
?>

上記のように記述すればOKです。

ちなみに、addBeforeHtml の引数は下記の通りです。

引数 内容
第1引数 カスタムHTMLを挿入したいページのテーブル名
第2引数 どのページに挿入するか。配列で複数指定も可能
・ list => 一覧
・edit => 追加・編集
・view => 詳細
第3引数 表示したいHTMLのテキストを返す関数

すると、

のように詳細画面上部に「キャラクター一覧画面」とちゃんとHTMLが追加で表示されているのがわかりますね!

テーブルに項目とデータを追加

さらに、DBには入っていないようなデータを追加することも可能です。

例えば、先ほどのキャラクター一覧画面に、「次のレベルへの必要経験値」も表示させたくなったとします。

そんな場合には、先ほどの” /var/www/html/custom/sample.php ” に

$menugroup->addDataToList('characters',"必要経験値",function($data){
return $data['lv'] * $data['lv'] * 10;});

という記述を追加して

<?php
$menugroup = MenuGroup::getMenuInstance('pf_admin');
$menugroup->addBeforeHtml('characters','list',function(){
  return <<<DOC_END
<div style="font-size:20px">キャラクター一覧画面</div>
DOC_END;
});
$menugroup->addDataToList('characters',"必要経験値",function($data){
return $data['lv'] * $data['lv'] * 10;});
?>

というように、”$menugroup->addDataToList(~~~) ” を追加すればOKです。テーブルに固有のカラムである” lv ” を “$data[‘lv’]” とすることで取得してきて、必要経験値を算出する式を付け加えています。

すると、

のように、必要経験値も表示されていますね!

ちなみに、addDataToList の引数は下記の通りです。

引数 内容
第1引数 カスタムHTMLを挿入したいページのテーブル名
第2引数 項目名
第3引数 コールバック関数
引数に各行のデータが与えられるため、表示したいHTMLを返す。
第4引数 左から何番目に表示するかの数値
デフォルトは-1 (最後に表示)

 

追加・編集後の動作を追加

データの追加・編集後の動作を追加することも可能です。例えば、このキャラクター一覧画面に誰かがデータを追加したら、管理人にメール通知するようにしたい場合、

$menugroup->afterEdit('characters', function ($id, $pre_data) {
    mb_send_mail("admin@mail.com", "title:charactersへのデータ追加通知", "content:追加された内容");
},true);

このような記述を加えれば、メールが送信されます!

これは結構便利ですね。

ちなみに、addDataToList の引数は下記の通りです。

引数 内容
第1引数 対象となるテーブル名
第2引数 処理を行うコールバック関数
第3引数 true = 追加された時のみ
false = 追加・編集時
defaultはfalse

 

Hook機能まとめ

ここまで3種類のHook機能を紹介してきましたが、他にも

  • 削除後に処理を行う
  • ページで外部のJavaScriptやCSSをロードする
  • 詳細ページの画面をカスタマイズする

など、多くのカスタマイズが可能になっています。ぜひ、使ってみてくださいね。

詳しくは、ドキュメントをご覧ください。

機能一覧ページへ