メッセージモジュール API

~ Message Module API 和訳 ~

メッセージモジュールは実用的な汎用のログ記録ツールです。Drupal サイトで発生するあらゆるタイプのアクティビティーを記録することができます。私は以前に Rules モジュールを使ったメッセージモジュールの使い方に関する記事を書きました。もしあなたがこのモジュールをまだ使ったことが無いなら、まずこちらの記事「Log Site Activity with Message and Rules」を読むことをお勧めします。このモジュールがどのようなものか、概要を理解できるでしょう。

この記事では、Entity モジュールの entity_metadata_wrapper() 関数を使って、プログラミングでメッセージを作成してみます。そして最後にはメッセージログをどのように表示するのかを見てみます。これはテンプレートファイルに手動でメッセージを追加する場面などで役立つでしょう。

メッセージモジュールには message_example モジュールが同梱されていますので、是非これを有効化させて以下のコードが実際に動作するところを確認してください。

メッセージログを作成する

それではやってみましょう。「サイト構築」 > 「メッセージタイプ」(admin/structure/messages)にアクセスし、テーブル1-1に示す設定で、メッセージタイプを追加して下さい。

テーブル 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 フィールドの値を表示します。

今日はメッセージモジュールについて理解を深めて頂けたでしょうか。もし質問があればコメントしてください。

コア: 
Drupal7