メッセージモジュールは実用的な汎用のログ記録ツールです。Drupal サイトで発生するあらゆるタイプのアクティビティーを記録することができます。私は以前に Rules モジュールを使ったメッセージモジュールの使い方に関する記事を書きました。もしあなたがこのモジュールをまだ使ったことが無いなら、まずこちらの記事「Log Site Activity with Message and Rules」を読むことをお勧めします。このモジュールがどのようなものか、概要を理解できるでしょう。
この記事では、Entity モジュールの entity_metadata_wrapper() 関数を使って、プログラミングでメッセージを作成してみます。そして最後にはメッセージログをどのように表示するのかを見てみます。これはテンプレートファイルに手動でメッセージを追加する場面などで役立つでしょう。
メッセージモジュールには message_example モジュールが同梱されていますので、是非これを有効化させて以下のコードが実際に動作するところを確認してください。
それではやってみましょう。「サイト構築」 > 「メッセージタイプ」(admin/structure/messages)にアクセスし、テーブル1-1に示す設定で、メッセージタイプを追加して下さい。
メッセージタイプ | 値 |
---|---|
説明 | Node log |
MESSAGE TEXT | !action by @name. |
Replacement tokens | !action, @name |
メッセージタイプが追加できたら次はコーディングです。単純にメッセージを作成するには次のように記述します。
$values = array( 'arguments' => array( '!action' => 'Content updated', '@name' => 'John'), ); $message = message_create('node_log', $values); $wrapper = entity_metadata_wrapper('message', $message); $wrapper->save();
メッセージタイプで、メッセージテキストに「!action by @name.」と設定しましたので、この場合は「Content updated by John.」のように置換されます。
引数として渡す変数 $values の値の配列では、それぞれトークンがどのように置換されるかを設定しています。変数 $message はここで生成されたメッセージオブジェクトです。関数 message_create() はメッセージタイプと引数を定義した変数 $values をもとにメッセージを生成します。変数 $wrapper は Entity API モジュールの提供する関数 entity_metadata_wrapper() によって生成され、最終的には $wrapper->save() によってメッセージが保存されます。
メッセージタイプにフィールドを追加している場合は、entity_metadata_wrapper の set メソッドでそれらをセットしてください。
例:
$wrapper = entity_metadata_wrapper('message', $message); $wrapper->field_published->set($node->status); $wrapper->save();
メッセージログの生成過程を見てきましたが、最後に、ここでメッセージの読み込み、表示の場面について見てみましょう。メッセージを表示しリストするには Views モジュールを使うのが便利だと思いますが、コーディングでこれを実現する方法を知っておくことも大切です。
$message = message_load(5); $message->getText();
上記のコードでは、メッセージID「5」のメッセージをロードし、getText() メソッドでメッセージテキストの内容を表示しています。最も単純な例です。
そのメッセージタイプにフィールドを追加しているなら、$message を entity_metadata_wrapper() に渡します。
例:
$message = message_load(5); $message->getText(); $wrapper = entity_metadata_wrapper('message', $message); $wrapper->field_published->value();
$wrapper->field_published->value(); はメッセージログの field_published フィールドの値を表示します。
今日はメッセージモジュールについて理解を深めて頂けたでしょうか。もし質問があればコメントしてください。