You are here

API.txt in Context 6

Same filename and directory in other branches
  1. 6.3 API.txt
  2. 7.3 API.txt
Context 3.x API
---------------
The following is an overview of using the Context API.


The context static cache
------------------------
Context provides a centralized set of API functions for setting and retrieving a
static cache:

    // Set a static cache value at [my_namspace][mykey]
    context_set('my_namespace', 'mykey', $value);

    // Retrieve a static cache value at [my_namespace][mykey]
    context_get('my_namespace', 'mykey'); // $value

    // Boolean for whether there is a value at [my_namespace][mykey]
    context_isset('my_namespace', 'mykey'); // TRUE

These are used internally by context but may also be used by other modules. Just
do not use the namespace `context` unless you want to affect things that context
is up to.


Adding a condition or reaction plugin
-------------------------------------
Both context conditions and reactions utilize the CTools plugins API. In order
to add a new condition or reaction for your module, follow these steps:

1. Implement `hook_context_plugins()` to define your plugins, classes, and class
  hierarchy.

        function mymodule_context_plugins() {
          $plugins = array();
          $plugins['mymodule_context_condition_bar'] = array(
            'handler' => array(
              'path' => drupal_get_path('module', 'mymodule') .'/plugins',
              'file' => 'mymodule_context_condition_bar.inc',
              'class' => 'mymodule_context_condition_bar',
              'parent' => 'context_condition',
            ),
          );
          return $plugins;
        }

2. Implement `hook_context_registry()` to define your conditions and/or
  reactions and map them to plugins.

        function mymodule_context_registry() {
          return array(
            'conditions' => array(
              'bar' => array(
                'title' => t('Name of condition "bar"'),
                'plugin' => 'mymodule_context_condition_bar',
              ),
            ),
          );
        }

3. Write your condition or reaction plugin class. It's best to look at one of
  the included plugins as a starting point.

4. Add in a Drupal integration point for your plugin. A node page condition
  plugin, for example, may be invoked from `hook_nodeapi()`.


Replacing or extending existing plugins
---------------------------------------
You can replace a condition or reaction plugin with your own plugin class using
`hook_context_registry_alter()`:

    function mymodule_context_registry_alter(&$registry) {
      if (!empty($registry['conditions']['node'])) {
        $registry['conditions']['node']['plugin'] = 'mymodule_context_condition_customnode';
      }
    }

This entry would swap out the default node condition plugin for a custom one
provided by `mymodule`. Note that any replacement plugins must have an entry in
`hook_context_plugins()`.

File

API.txt
View source
  1. Context 3.x API
  2. ---------------
  3. The following is an overview of using the Context API.
  4. The context static cache
  5. ------------------------
  6. Context provides a centralized set of API functions for setting and retrieving a
  7. static cache:
  8. // Set a static cache value at [my_namspace][mykey]
  9. context_set('my_namespace', 'mykey', $value);
  10. // Retrieve a static cache value at [my_namespace][mykey]
  11. context_get('my_namespace', 'mykey'); // $value
  12. // Boolean for whether there is a value at [my_namespace][mykey]
  13. context_isset('my_namespace', 'mykey'); // TRUE
  14. These are used internally by context but may also be used by other modules. Just
  15. do not use the namespace `context` unless you want to affect things that context
  16. is up to.
  17. Adding a condition or reaction plugin
  18. -------------------------------------
  19. Both context conditions and reactions utilize the CTools plugins API. In order
  20. to add a new condition or reaction for your module, follow these steps:
  21. 1. Implement `hook_context_plugins()` to define your plugins, classes, and class
  22. hierarchy.
  23. function mymodule_context_plugins() {
  24. $plugins = array();
  25. $plugins['mymodule_context_condition_bar'] = array(
  26. 'handler' => array(
  27. 'path' => drupal_get_path('module', 'mymodule') .'/plugins',
  28. 'file' => 'mymodule_context_condition_bar.inc',
  29. 'class' => 'mymodule_context_condition_bar',
  30. 'parent' => 'context_condition',
  31. ),
  32. );
  33. return $plugins;
  34. }
  35. 2. Implement `hook_context_registry()` to define your conditions and/or
  36. reactions and map them to plugins.
  37. function mymodule_context_registry() {
  38. return array(
  39. 'conditions' => array(
  40. 'bar' => array(
  41. 'title' => t('Name of condition "bar"'),
  42. 'plugin' => 'mymodule_context_condition_bar',
  43. ),
  44. ),
  45. );
  46. }
  47. 3. Write your condition or reaction plugin class. It's best to look at one of
  48. the included plugins as a starting point.
  49. 4. Add in a Drupal integration point for your plugin. A node page condition
  50. plugin, for example, may be invoked from `hook_nodeapi()`.
  51. Replacing or extending existing plugins
  52. ---------------------------------------
  53. You can replace a condition or reaction plugin with your own plugin class using
  54. `hook_context_registry_alter()`:
  55. function mymodule_context_registry_alter(&$registry) {
  56. if (!empty($registry['conditions']['node'])) {
  57. $registry['conditions']['node']['plugin'] = 'mymodule_context_condition_customnode';
  58. }
  59. }
  60. This entry would swap out the default node condition plugin for a custom one
  61. provided by `mymodule`. Note that any replacement plugins must have an entry in
  62. `hook_context_plugins()`.