94 lines
3.8 KiB
Plaintext
94 lines
3.8 KiB
Plaintext
|
|
Drupal module: Variable Realms
|
|
============================================
|
|
This is an API module that works as an arbitrator for multiple modules overriding global variables. It can
|
|
handle multiple realms defined by different modules. Examples: 'global', 'language', 'country',
|
|
|
|
Each realm has a weight and a current status. Realms with higher weights will override realms with lower weight.
|
|
|
|
There's a special 'global/default' realm that is the one storing default global variables. It has a weight of 0
|
|
so realms with weights higher than that (default weight for new realms is 10) will override these.
|
|
|
|
Any number of realms can be defined by different modules. If two modules use the same realm, the last one's variables
|
|
and weight will override the previous one. Every time we switch a realm, the $conf global array will be rebuilt.
|
|
|
|
At any moment the $conf global array of variables will be a combination of the active realms.
|
|
If we've got these two reamls defined:
|
|
- global/default, weight 0, which is defined by this module, will hold global default variables
|
|
- mymodule/key, weight 10, which may be defined by any contrib module on hook_boot() or hook_init()
|
|
The resulting variable set will be a combination of these two, with the second overriding the first one,
|
|
because of a higher weight. This is how we calculate the resulting variables when using variable_realm_switch()
|
|
|
|
$conf = $variables['global/default'] + $variables['mymodule/key']
|
|
|
|
API Example
|
|
-----------
|
|
This is an example of how realms work:
|
|
|
|
// We add a language realm with some variables and immediately switch to it
|
|
variable_realm_add('language', 'es', $spanish_variables);
|
|
variable_realm_switch('language', 'es');
|
|
|
|
// We add a country realm on top of it with some more variables but don't switch to it yet.
|
|
// Note the first time we add a domain we can set the weight for it.
|
|
|
|
variable_realm_add('country', 'spain', $spain_variables, 100);
|
|
|
|
// We add another country realm, but don't switch to it.
|
|
// The same weight from previous 'country' realm will be used
|
|
|
|
variable_realm_add('country', 'mexico', $mexico_variables);
|
|
|
|
// Now we can switch to the 'spanish/spain' set of variables
|
|
|
|
variable_realm_switch('country', 'spain');
|
|
|
|
// Or we can use the 'spanish/mexico' set
|
|
|
|
variable_realm_switch('country', 'mexico');
|
|
|
|
// Still we can add one more realm which will override some variables for the current node's content type
|
|
// These will override all the others because of its higher weight
|
|
variable_realm_add('nodetype', 'story', $story_variables, 200)
|
|
variable_realm_switch('nodetype', 'story')
|
|
|
|
An example of a module using this API is Internationalization's i18n_variable module.
|
|
|
|
Variable Realm Union.
|
|
====================================
|
|
|
|
This an API that allows combining two existing realms into a new one
|
|
whose keys are a combination of the other two.
|
|
|
|
An example of this module in action is the 'Domain+I18n Variables Integration' module
|
|
which is part of 'Domain Variable' module.
|
|
|
|
How to use it.
|
|
=============
|
|
To define a new domain that is a combination of two or more existing ones:
|
|
|
|
1. Implement hook_variable_realm_info() to define the realm name and properties.
|
|
|
|
function domain_i18n_variable_variable_realm_info() {
|
|
$realm['domain_language'] = array(
|
|
'title' => t('Domain+Language'),
|
|
// Display on settings forms but without form switcher.
|
|
'form settings' => TRUE,
|
|
'form switcher' => FALSE,
|
|
'variable name' => t('multilingual domain'),
|
|
);
|
|
return $realm;
|
|
}
|
|
|
|
2. Implement hook_variable_realm_controller() to define the Controller class to
|
|
be used and which other realms it is a combination of. Example:
|
|
|
|
function domain_i18n_variable_variable_realm_controller() {
|
|
$realm['domain_language'] = array(
|
|
'weight' => 200,
|
|
'class' => 'VariableStoreRealmController',
|
|
'union' => array('domain', 'language'),
|
|
);
|
|
return $realm;
|
|
}
|