The Message module is a general logging utility tool which you can use to log any type of activity on a Drupal website. I’ve already written about how you can use Message module with Rules. If you’ve never used this module I would recommend that you read "Log Site Activity with Message and Rules" first, so you can get a good introduction on how to use Message module.
In this article we’ll look at creating messages programmatically via Entity’s entity_metadata_wrapper() function. Finally we’ll look at how to load and display a message log. This is useful if you need to manually add a message to a template file.
The Message module ships with a message_example module. Enable this module to see the code below in action.
Create Message Logs
If you want to follow along, go to Structure -> "Message types" (admin/structure/messages) and create a message type with the values detailed in Table 1-1.
Table 1-1. Creating a message type
| Message type | Value |
| Description | Node log |
| Message text | !action by @name. |
| Replacement tokens | !action, @name |
Now let's jump into some code. To create a message log simply run:
$values = array(
'arguments' => array(
'!action' => ‘Content updated’,
'@name' => ‘John’),
);
$message = message_create('ww_node_log', $values);
$wrapper = entity_metadata_wrapper('message', $message);
$wrapper->save();
When we created the message log, we added !action by @name. into the message text. These replacement tokens would then be replaced by "Content updated by John.".
In the arguments array within the $values variable, all you need to do is define what the token should be replaced with. The $message variable is used to create the message object. All we need to pass the message_create function is message type and the $values variable defining the arguments. The $wrapper will be used to load entity_metadata_wrapper function from Entity API module and finally we just save the message with $wrapper->save().
If you have attached a field to the message type, just set the field value by using entity_metadata_wrapper’s set method.
For example:
$wrapper = entity_metadata_wrapper('message', $message);
$wrapper->field_published->set($node->status);
$wrapper->save();
View Message Logs
In the last section we looked at creating a message log, now let’s look at loading and displaying a message. Most of the time you’ll use Views to display or list messages, however, it’s still good to know how to do all of this via code.
$message = message_load(5); $message->getText();
In the above code example, all we have done is load a message with the message ID of 5 and display the message text via getText() method, that's the simplest example.
If you've attached a field to the message type, then you'll have to pass the $message variable via the entity_metadata_wrapper function.
For example:
$message = message_load(5);
$message->getText();
$wrapper = entity_metadata_wrapper('message', $message);
$wrapper->field_published->value();
$wrapper->field_published->value(); will display the value for the field_published field attached to the message log.
I hope you've learned something new today about the Message module. If you have any question please leave a comment below.




