Объединение баз данных в Drupal - PullRequest
1 голос
/ 16 декабря 2010

Итак, вот сценарий:

Я строю серию веб-сайтов событий, которые должны быть отдельными установками Drupal-6 на одном сервере.Каждый из них использует одну и ту же архитектуру, но разные URL-адреса и темы.

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

Чтобы новые учителя и спонсорские узлы можно было создавать и редактировать из любогоустановки Drupal.

Было бы также удобно делиться пользовательской таблицей, но не обязательно.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 16 декабря 2010

Помогает ли это ?

Комментарии в файле settings.txt объясняют, как использовать $ db_prefix для совместного использования таблиц:

 * To provide prefixes for specific tables, set $db_prefix as an array.
 * The array's keys are the table names and the values are the prefixes.
 * The 'default' element holds the prefix for any tables not specified
 * elsewhere in the array. Example:
 *
 *   $db_prefix = array(
 *     'default'   => 'main_',
 *     'users'     => 'shared_',
 *     'sessions'  => 'shared_',
 *     'role'      => 'shared_',
 *     'authmap'   => 'shared_',
 *   );

Другой способ, хотя я не знаю, сработает ли это, - создать одну базу данных на установку Drupal и создать в каждой базе данных VIEW, например.install1_users, install2_users, который ссылается на одну общую таблицу shared_users в общей базе данных.Тщательно построенное представление должно быть обновляемым , как обычная таблица.

2 голосов
/ 17 декабря 2010

Похоже на работу для проекта Domain Access , набора модулей, которые предоставляют инструменты для запуска группы дочерних сайтов из одной установки Drupal и единой общей базы данных.Модуль позволяет обмениваться пользователями, контентом и конфигурациями на нескольких сайтах.По умолчанию эти сайты совместно используют все таблицы в вашей установке Drupal, но модуль Domain Prefix допускает выборочный динамический префикс таблиц для опытных пользователей.

ИМХО, это намного лучше, чем развертывание пользовательского решения.что создает значительную сложность и риск невозможности обновить ваш сайт.См. Совместное использование таблиц между экземплярами (не рекомендуется) .

1 голос
/ 17 декабря 2010

Есть несколько способов сделать это.

Если можно использовать одну и ту же базу данных, вы можете использовать префикс следующим образом:

$db_prefix = array(
  'default'   => 'main_',
  'users'     => 'shared_',
  'sessions'  => 'shared_',
  'role'      => 'shared_',
  'authmap'   => 'shared_',
);

Однако имейте в виду, чтосуществует жесткое ограничение на количество таблиц, которые может содержать база данных MySQL.Согласно этой теме , это 1792 .Если вы подозреваете, что достигнете этого предела, вы можете использовать этот хак / баг.

$db_prefix = array(
  'default'   => '',
  'users'     => 'maindb.',
  'sessions'  => 'maindb.',
  'role'      => 'maindb.',
  'authmap'   => 'maindb.',
);

, где maindb - это еще одна общая база данных, которая содержит необходимые вам данные.Это не лучшая практика, но она работает в Drupal 6 (не тестировалась в D7).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...