README.txt 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. Drupal module: Variable Realms
  2. ============================================
  3. This is an API module that works as an arbitrator for multiple modules overriding global variables. It can
  4. handle multiple realms defined by different modules. Examples: 'global', 'language', 'country',
  5. Each realm has a weight and a current status. Realms with higher weights will override realms with lower weight.
  6. There's a special 'global/default' realm that is the one storing default global variables. It has a weight of 0
  7. so realms with weights higher than that (default weight for new realms is 10) will override these.
  8. Any number of realms can be defined by different modules. If two modules use the same realm, the last one's variables
  9. and weight will override the previous one. Every time we switch a realm, the $conf global array will be rebuilt.
  10. At any moment the $conf global array of variables will be a combination of the active realms.
  11. If we've got these two reamls defined:
  12. - global/default, weight 0, which is defined by this module, will hold global default variables
  13. - mymodule/key, weight 10, which may be defined by any contrib module on hook_boot() or hook_init()
  14. The resulting variable set will be a combination of these two, with the second overriding the first one,
  15. because of a higher weight. This is how we calculate the resulting variables when using variable_realm_switch()
  16. $conf = $variables['global/default'] + $variables['mymodule/key']
  17. API Example
  18. -----------
  19. This is an example of how realms work:
  20. // We add a language realm with some variables and immediately switch to it
  21. variable_realm_add('language', 'es', $spanish_variables);
  22. variable_realm_switch('language', 'es');
  23. // We add a country realm on top of it with some more variables but don't switch to it yet.
  24. // Note the first time we add a domain we can set the weight for it.
  25. variable_realm_add('country', 'spain', $spain_variables, 100);
  26. // We add another country realm, but don't switch to it.
  27. // The same weight from previous 'country' realm will be used
  28. variable_realm_add('country', 'mexico', $mexico_variables);
  29. // Now we can switch to the 'spanish/spain' set of variables
  30. variable_realm_switch('country', 'spain');
  31. // Or we can use the 'spanish/mexico' set
  32. variable_realm_switch('country', 'mexico');
  33. // Still we can add one more realm which will override some variables for the current node's content type
  34. // These will override all the others because of its higher weight
  35. variable_realm_add('nodetype', 'story', $story_variables, 200)
  36. variable_realm_switch('nodetype', 'story')
  37. An example of a module using this API is Internationalization's i18n_variable module.
  38. Variable Realm Union.
  39. ====================================
  40. This an API that allows combining two existing realms into a new one
  41. whose keys are a combination of the other two.
  42. An example of this module in action is the 'Domain+I18n Variables Integration' module
  43. which is part of 'Domain Variable' module.
  44. How to use it.
  45. =============
  46. To define a new domain that is a combination of two or more existing ones:
  47. 1. Implement hook_variable_realm_info() to define the realm name and properties.
  48. function domain_i18n_variable_variable_realm_info() {
  49. $realm['domain_language'] = array(
  50. 'title' => t('Domain+Language'),
  51. // Display on settings forms but without form switcher.
  52. 'form settings' => TRUE,
  53. 'form switcher' => FALSE,
  54. 'variable name' => t('multilingual domain'),
  55. );
  56. return $realm;
  57. }
  58. 2. Implement hook_variable_realm_controller() to define the Controller class to
  59. be used and which other realms it is a combination of. Example:
  60. function domain_i18n_variable_variable_realm_controller() {
  61. $realm['domain_language'] = array(
  62. 'weight' => 200,
  63. 'class' => 'VariableStoreRealmController',
  64. 'union' => array('domain', 'language'),
  65. );
  66. return $realm;
  67. }