PubSub
Categories
Component ID
Component name
Component type
Maintenance status
Development status
Component security advisory coverage
Downloads
Component created
Component changed
Component body
PubSub provides an API for publishing messages and subscribing to published messages. Additionally, it provides a cascading structure for messages allowing modules to extend PubSub in creative ways.
You publish a message by calling pubsub_publish('your.message', $any, $args, $you, $want). Messages are expanded and sent to all subscribers. For example:
Calling the following method:
pubsub_publish('foo.bar.baz', $arg1, $arg2);
Will execute the following hooks:
hook_pubsub('foo.bar.baz', $arg1, $arg2);
hook_pubsub_foo('bar.baz', $arg1, $arg2);
hook_pubsub_foo_bar('baz', $arg1, $arg2);
Examples
Publishing and subscribing to messages.
/**
* Implementation of hook_nodeapi().
*/
function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'update':
pubsub_publish('node.update', $node);
}
}
/**
* Implementation of hook_pubsub().
*/
function mymodule_pubsub($message, $node) {
switch ($message) {
case 'node.update':
/* Do something awesome with $node */
break;
}
}
/**
* Implementation of hook_pubsub_MESSAGE().
*/
function mymodule_pubsub_node($message, $node) {
switch ($message) {
case 'update':
/* Do something awesome with $node */
break;
}
}
Sub Modules
Out of the box, PubSub comes with 2 sub modules: PubSub Cron and PubSub JavaScript.
PubSub Cron
PubSub Cron re-publishes all messages of the pattern cron.* when Drupal's cron runs. This can be very useful as a sort of message queue, allowing you to offload expensive operations to cron.
Example
/**
* Implementation of hook_init().
*/
function mymodule_init() {
// Publish a message to PubSub Cron.
pubsub_publish('cron.mymodule.init', 1, 2, 3, 4);
}
/**
* Implementation of hook_pubsub_MESSAGE().
*
* This hook will be called when Drupal's cron runs.
*/
function mymodule_pubsub_mymodule($message, $arg1, $arg2, $arg3, $arg4) {
switch ($message) {
case 'init':
/* Do something awesome */
break;
}
}
PubSub JavaScript
PubSub JavaScript re-publishes all messages of the pattern js.* to JavaScript, executing subscribers in Drupal.behaviors.
Example
/**
* Implementation of hook_init().
*/
function mymodule_init() {
// Publish a message to PubSub JavaScript
pubsub_publish('js.mymodule.init', 1, 2, 3, 4);
}
In JavaScript:
/**
* Subscribe to the js.mymodule.init message.
*/
Drupal.pubsub.subscribe('mymodule.init', function(one, two, three, four) {
/* Do something awesome */
});
