Как я могу создать переменную с разными значениями для каждого домена, используя доступ к домену?
У меня есть числовое значение, уникальное для каждого домена (с использованием доступа к домену) на моем сайте. Я хотел бы использовать одно и то же имя переменной, чтобы я мог использовать одну и ту же тему и отображать это значение во всех доменах. Возможно ли это?
В настоящее время я определяю переменную в пользовательском модуле, но сохраняю только 1 значение. Могу ли я изменить код в пользовательском модуле, чтобы каждый домен мог иметь свое собственное уникальное значение для этой переменной?
ОБНОВЛЕНИЕ:
Добавление при определении переменной в моем пользовательском модуле сработало следующее: D
'multidomain' => true,
Я могу редактировать переменную через admin/config/system/переменная/редактировать/, и я получаю уникальные значения в своих доменах, хранящихся в таблице variable_store. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я хочу создать форму администратора для получения/настройки множества переменных домена, а обычные переменные /переменные не работают... какие-нибудь мысли?
3 answers
Необходимо включить подмодуль "конфигурация домена" (domain_conf) Это предоставит вам опцию сохранения для каждого домена:
function your_module_form($form, &$form_state) {
$form['variable'] = array(
'#type' => 'value',
'#value' => time(),
);
return system_settings_form($form);
}
Получение переменной вручную:
function domain_conf_variable_get($domain_id, $variable = '', $all = FALSE, $reset = FALSE)
Ввод переменной вручную:
function domain_conf_variable_set($domain_id, $variable, $value = NULL)
Существует модуль, который призван заменить модуль обработки переменных для доступа к домену, если вам нужно установить разные значения переменных для каждого домена и для каждого языка одновременно, вам нужен модуль переменных домена https://drupal.org/project/domain_variable
Другой способ сделать это - с помощью
, который дает вам приятный пользовательский интерфейс настроек в разделе Домен > Настройки
Например, я написал реализацию этого крючка для настроек хэша сайта apachesolr для каждого домена:
/**
* Implements hook_domain_batch().
*
* Add batch settings to Domain Conf.
*/
function MODULENAME_domain_batch() {
$batch = array();
if(function_exists('apachesolr_site_hash')){
$batch['apachesolr_site_hash'] = array(
'#form' => array(
'#title' => t('Apache Solr site hash'),
'#type' => 'textfield',
'#description' => t('Unique site hash for Apache Solr.'),
),
'#domain_action' => 'domain_conf',
'#permission' => 'administer site configuration',
'#system_default' => apachesolr_site_hash(),
'#meta_description' => t('Set Apache Solr site hash for each domain.'),
'#variable' => 'apachesolr_site_hash',
'#data_type' => 'string',
'#weight' => -1,
'#group' => t('Apache Solr'),
'#update_all' => TRUE,
'#module' => t('Apache Solr'),
);
}
return $batch;
}
Затем вы можете просто использовать variable_get для получения значения в этом домене.
Хорошо, вот как я решил эту проблему...Я надеюсь, что это "правильный" путь:
Определите переменную, "многодоменная" - это разница в импорте
function MODULENAME_variable_info($options) {
$variable['social_media_link_twitter'] = array(
'title' => t('Twitter', array(), $options),
'description' => t('Twitter URL', array(), $options),
'type' => 'string',
'multidomain' => true,
'access' => 'social media links'
);
Создайте меню, чтобы перейти к форме администратора
function MODULENAME_menu() {
$items = array();
$items['admin/social-media-links'] = array(
'title' => t('Social Media Links'),
'page callback' => 'MODULENAME_social_media_links_admin',
'access arguments' => array('social media links'),
);
return $items;
}
Обратный вызов страницы меню
function MODULENAME_social_media_links_admin() {
return drupal_get_form('MODULENAME_socialmedialinks_form');
}
Объявление формы
function MODULENAME_socialmedialinks_form($form_state) {
/* Just regular old variable_get() */
$form['social_media_link_twitter'] = array(
'#title' => t('Twitter'),
'#type' => 'textfield',
'#description' => t('Enter your twitter URL. Example: http://twitter.com/SomethingOn'),
'#default_value' => variable_get('social_media_link_twitter', '')
);
/* return the system settings form, not just $form */
return system_settings_form($form);
}
Отправить форму
function MODULENAME_socialmedialinks_form_submit($form, &$form_state) {
/* For some reason I have to manually get the domain and set the realm?! */
$domain = domain_get_domain();
variable_realm_switch('domain', $domain['subdomain']);
domain_conf_variable_set($domain['domain_id'], 'social_media_link_twitter', $form_state['values']['social_media_link_twitter']);
}