Как я могу создать переменную с разными значениями для каждого домена, используя доступ к домену?


У меня есть числовое значение, уникальное для каждого домена (с использованием доступа к домену) на моем сайте. Я хотел бы использовать одно и то же имя переменной, чтобы я мог использовать одну и ту же тему и отображать это значение во всех доменах. Возможно ли это?

В настоящее время я определяю переменную в пользовательском модуле, но сохраняю только 1 значение. Могу ли я изменить код в пользовательском модуле, чтобы каждый домен мог иметь свое собственное уникальное значение для этой переменной?

ОБНОВЛЕНИЕ:

Добавление при определении переменной в моем пользовательском модуле сработало следующее: D

'multidomain' => true,

Я могу редактировать переменную через admin/config/system/переменная/редактировать/, и я получаю уникальные значения в своих доменах, хранящихся в таблице variable_store. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я хочу создать форму администратора для получения/настройки множества переменных домена, а обычные переменные /переменные не работают... какие-нибудь мысли?

Author: SomethingOn, 2013-09-16

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

 4
Author: Enxebre, 2013-09-16 21:18:13

Другой способ сделать это - с помощью

Hook_domain_батч

, который дает вам приятный пользовательский интерфейс настроек в разделе Домен > Настройки

Например, я написал реализацию этого крючка для настроек хэша сайта 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 для получения значения в этом домене.

 2
Author: David Thomas, 2013-09-16 22:26:36

Хорошо, вот как я решил эту проблему...Я надеюсь, что это "правильный" путь:

Определите переменную, "многодоменная" - это разница в импорте

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']);
}
 1
Author: SomethingOn, 2013-10-30 14:43:37