Решил установить несколько сайтов под Друпалом в мультисайтовой связке.
Требования:
- единая регистрация (один раз зарегистрировался и больше не надо регится - остальные сайты видят тебя автоматом);
- при регистрации под именем seit1 на основном сайте(my_site.ru) создаётся "дочерний" сайт типа seit1.my_site.ru;
- соответственно на дочернем сайте тема и документы свои;
Буду описывать, что делал (может кому пригодится):
Первым делом, конечно же почитал информацию на сайте drupal.ru
Что интересного нашёл?
На самом сайте информации много (даже через чур много, для неопытного пользователя можно потеряться), но главное - это ссылки на стать по данной теме, размещённые на других сайтах, а на этом только ответы на некоторые вопросы.
Что за ссылки?
Их много буду рассматривать по ходу прохождения всего процесса установки мультисайтинга.
Первая статья (с уважаемого мною сайта - http://andyceo.ruware.com/blog/labelman/multisaiting-na-drupale-eto-kruto )
Правда написана в 2007 году, а это уже раритет, но для общего понятия начал с неё.
Буду использовать Друпал 6!
Статья оказалась полезной, но не для моего варианта. Больше подходит для объединения нескольких сайтов с общими таблицами пользователей.
Из данной статьи усвоил следующее:
Также у Вас есть файл
settings.php
, находящийся в подпапкеsites/default/settings.php
. В нем прописываются все необходимые параметры базы данных, нужные для работы Друпал.Друпал позволяет для каждой из таблиц задать отдельный префикс.
Возникает понимание, что некоторую информацию
сайта1
исайта2
неплохо бы объединить. Например сделать общих пользователей.Вот здесь-то и проявляется вся гибкость и мощь Друпала, здесь-то мы и осознаем в полной мере, насколько удобно задавать разным таблицам разные префиксы, и как Друпал умеет работать с разными БД.
Сделать общим можно все! Начиная от пользователей и заканчивая документами (нодами).
Поэтому, после некоторого тестинга, я пришёл к выводу, что объединить без ущерба нарушения целостности БД и психики можно:
- Пользователей,
- Роли пользователей и права ролей
- Профили пользователей
- Переводы ядра и модулей
- Словари
- Термины в словарях
- Фильтры сообщений - насчет этого уже не уверен, т.к. таблица filter_formats привязывается к кэшу (поле cash), а таблица filters использует id фильтра из таблицы filter_formats, таким образом, обе таблицы фильтров привязаны к конкретному сайту.
Т.е. вообще все таблицы и модули, в которых нет жёсткой привязки к документам (нодам).
чтобы сделать общих пользователей, нам нужно сделать для сайтов общие таблицы пользователей. Допустим, что у нас уже есть
сайт1
, и новый сайтсайт2
, и мы осознали что неплохо было бы, если пользователь зарегистрировался на каком-либо из этих сайтов, имел бы доступ и к другому.За пользователей у нас в Друпале отвечают следующие таблицы:
'authmap'
'sessions'
'sequences'
'users'Таблица users - непосредственно хранит данные пользователя.
Таблица sequences - хранит служебную информацию Друпал. Для каждой таблицы, в sequences сохраняется её имя, и следующее значение первичного ключа. (Если вообще планируете сделать что-то общее для каких-то двух сайтов, таблицу sequences рекомендую делать общей при любом раскладе).
Таблица sessions хранит информацию текущих сессий пользователя.
Таблица authmap я не знаю пока чего хранит.Помимо вышеперечисленных таблиц, для пользователей существуют роли:
'role'
'users_roles'
При этом в таблице role хранится для каждого сайта информация о ролях пользователей, а в таблице users_roles - информация, какой пользователь к какой группе (роли) принадлежит. Скажу сразу, что если Вы хотите сделать так, чтобы роли для каждого сайта были абсолютно независимы, то Вам не нужно делать общей таблицу role. Таблицу users_roles можно сделать общей, если Вы делаете общих пользователей.
Profile module. Если у Вас включён модуль профилей для пользователей, тогда его таблицы тоже имеет смысл сделать общими:
'profile_fields' - хранит информацию о полях профиля
'profile_values' - хранит информацию поля.Locale module. Модуль локализации. Одна из удобнейших возможностей - использовать общую таблицу локализации, т.к. переводы всего и вся можно залить один раз и потом просто выбирать из админки нужного сайта.
'locales_meta'
'locales_source'
'locales_target'BUEditor Module. Это я привел чисто для примера. Любой модуль, не использующий привязку к документам, может быть объединён. Строго говоря, то же верно и для любого модуля, жёстко привязанного к документам, просто в нем надо найти таблицу связей для модуля и документов, и не делать её общей. Для модуля BUEditor таких таблиц нет, поэтому смело объединяем:
'bueditor_buttons'
'bueditor_editors'
Модули, полезные при мультисайтинге
- Shared Sign-Ons. Позволяет пользователям ограничиться залогиниванием на одном лишь сайте сайте. При переходе внутри мультисайтовой связки другие сайты будут узнавать такого пользователя без дополнительной аутентификации. В марте 2007 г. у этого модуля были проблемы из-за которых он работал устойчиво только при отключенном кэширования сайта.
- Fierce SSO. Альтернатива Single Sign-On. Позволяет узнавать пользователей, залогинившихся даже с сайтов не на Друпале.
- Registration role. Этот модуль позволяет назначать пользователям при регистрации заранее заданные роли. Можно на каждом сайте из связки завести отдельную роль, названную по имени сайта и присваивать зарегистрировавшимся пользователям роль, названную именем сайта. Такая информация служит для разделения пользователей по месту их исходной регистрации. Эта информация может быть полезна при выплате коммиссионных за приведенных покупателей. Или когда настанет время "выделить" сайт из связки вместе с пользователями, которые зарегистрировались на этом сайте
- Multisite Manager. Модуль позволяет плодить сайты на основе центрального сайта
- Multiple Domains. Позовляет создавать частичные клоны основного сайта. Например, можно вынести работу E-commerce или работу с пользовательскими аккаунтами на отдельный протокол https. Требует модуль single sign-on.
- Robotstxt позволяет создать отдельный robots.txt для каждого сайта в связке.
- Domain Access
- Domain Alias
- Domain Configuration
- Domain Content
- Domain Navigation
- Domain Prefix
- Domain Source
- Domain Strict
- Domain Theme
- Domain User
- Ни первая, ни вторая задачи не выполняются! Разбираемся дальше.
- Да, шустро я начал, а инструкцию и не почитал! Читаем и делаем как там написано.
- 5. По файлу README:
- - настроил DNS указал *.my_site.ru
- 6. По файлу INSTALL
- - настраиваем settings.php
- Добавил:
/* Чтобы сохранялась единая авторизация на всех поддоменах,
правда не всегда (или не сразу) работает в Opera, в других браузерах нормально. */ $cookie_domain = 'my_domain.ru'; /** * Add the domain module setup routine. */ include './sites/all/modules/domain/settings.inc';