xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Модуль Domain Access — несколько связанных сайтов на одной установке Drupal

Опубликовано в

Описание

Domain Access это набор модулей, позволяющих создать нескольких связанных сайтов (affiliated sites) на одной установке друпала с одной общей БД.

Например можно создать по сайту на каждое представительство вашей фирмы:

  • moscow.myfirm.ru
  • spb.myfirm.ru
  • kirov.myfirm.ru

которые будут иметь общие настройки (тема, пользователи, блоки, вьюсы и т.д.), но разный контент.

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

В модуль входит:

  • Domain Access — ядро
  • Domain Alias — позволяет указывать алиасы для доменов
  • Domain Configuration — настройки сайта, зависящие от домена
  • Domain Content — улучшенная страница управления контентом
  • Domain Navigation — блок для быстрого перехода на другие домены
  • Domain Settings — настройки, сохранённые с помощью system_settings_form() будут зависеть от домена
  • Domain Source — позволяет в форме создания материала указать исходный домен
  • Domain Strict — позволяет ограничить пользователям просмотр контента на определённом домене
  • Domain Theme — настройки темы, зависящие от домена

Полезные контриб модули:

  • Domain Views — интеграция с Views
  • Domain Blocks — видимость блоков на основе домена
  • Domain Menu Access — видимость пунктов меню на основе домена

Установка

1. Распаковать модуль в sites/all/modules

2. Добавить в конец settings.php:

/**
 * Add the domain module setup routine.
 */
include DRUPAL_ROOT . '/sites/all/modules/domain/settings.inc';

3. Включить необходимые модули.

4. Настроить модуль на странице admin/structure/domain

Скриншоты:

Домены
Настройки
Настройки
Форма добавления материала

Написанное актуально для Domain Access 7.x-3.3
Похожие записи

Комментарии RSS

Этот модуль в 6-ке славился своей несовместимостью с другими модулями и тем, что временами ведет себя непредсказуемо. Хочу заметить, что DA стоит использовать если вам нужна специфическая настройка прав к разным сайтам-аффилитатам. Если вам нужен обычный мультисайтинг, имхо лучше ручками настроить общие и отдельные таблицы.

мне нужен был мультисайтинг с одной базой, но разным контентом. перспектива создавать таблицы на каждый_домен/новое_поле особо не радовала, поэтому domain access подошёл как нельзя лучше. если это можно было реализовать как-то по другому, без лишних усилий, то с удовольствием послушаю

Скорее всего в этом случае вы правильно выбрали DA. Если таблиц достаточно много, и раздельные таблицы могут динамически добавляться/удалятся/объединяться (как в случае с схемой FieldAPI), то DA здесь лучший вариант

А я вот ломаюсь что выбрать - DA или мультисайтинг с префиксами. У меня будет два сайта с одинаковыми настройками, но на разных языках. Ситуация усложнена тем, что надо сохранять значение таблиц модуля Voting API общим для обоих сайтов, а соответственно, ID материалов и пользователей должны быть общими. Как считаешь, что лучше выбрать? Просто опять же по воспоминаниям из D6 - DA действительно косячный.

языки это i18n. или надо как-то по особенному?

Там сайт на разных доменах, могут отличаться блоками и содержимым.

я тут влезу как когда-то делавшая доклад по мультиязычности :)

Там сайт на разных доменах

можно сделать без мультисайтинга

могут отличаться блоками

i18n творит хорошо помогает с блоками. я думаю, что в Panels, как и в Views тоже есть необходимые настройки, в случае небольших различий. Так что можно сделать без мультисайтинга.

и содержимым.

Содержимое разных типов можно переводить с сохранением nid (Field Translation), без сохранения (Content Translation) или просто привязать к какому-то одному языку. Так что можно без мультисайтинга :)

@kalabro, спасибо.

@kalabro вопрос не в тему, но скажите у вас своего блога нет?) Мне кажется вы могли бы много чего интересного рассказать drupal-юзерам :)

emzzy, http://www.drupal.ru/username/kalabro
Если xandeadx сделает раздел «Письма читателей», то я бы с удовольствием генерировала ему уникальный контент раз в месяц)

Уважаемый автор, проконсультируйте как разделить контент по поддоменам. когда я создаю контент и указываю домен для публикации то нода публикуется на всех доменах. все настройки как у вас на скриншотах. спасибо

может потому что вы под админом

если не сложно поясните как правильно реализовать?
мои мысли таковы. Админ может выбрать к какому домену привязать ноду. выбирает и нода отправляется на нужный поддомен. Пробовал так, в итоге анонимы видят все ноды на всех поддоменах

проверьте права доступа, если не поможет, то пишите разработчику

ДД.

У меня проблема с этим модулем. Переношу работающий сайт на свой локалхост, или на поддомен на хостинге, вижу access denied для root пользователя.

Как настроить Апач в сборке Denwer для работы с модулем на локале?
Пробовал в httpd.conf прописывать

DocumentRoot /home/mysite.ru
ServerName mysite.ru
ServerAlias *.mysite.ru

Всё время выкидывает на "Ура заработало!" Денвера.

Гость, пт 31/08/2012 - 17:28

Может эта тема поможет: http://forum.dklab.ru/viewtopic.php?t=27463 ?

Скажите, умеет ли DA работать на разных доменах?
Т.е. xxx.com yyy.com ?

Можно ли выбрать разные темы для этих доменов?

DA работает везде, где работает друпал

Не понял ответа.
Как настраивать DA так, чтобы сайты xxx.com и yyy.org использовали одну и ту же базу но брали только свои материалы?

прочитать статью, поставить модуль, настроить сервер

исчерпывающий ответ :) Ладно ушел дальше гуглить

Подскажите, возможно ли настроить данный модуль так, чтобы авторизация/выход с сайта происходила сразу на всех поддоменах, т.е. чтобы при заходе на другой поддомен не надо было заново логиниться?

http://xandeadx.ru/blog/drupal/570#comment-6159
"в итоге анонимы видят все ноды на всех поддоменах"

Cтолкнулся с той же проблемой, не нашёл как исправить ?
Использую Drupal 7.22 и DA 3.10

Спасибо за материал! Поставил этот модуль, создал поддомен, но при попытке зайти на него браузер выдаёт ошибку "Сервер не найден". А так же в настройках этого домена появляется сообщение "http://domain.site.ru/sites/all/modules/domain/tests/200.png is not responding as expected and may not be configured correctly at the server level. Server code 0 was returned."
Помогите, пожалуйста, у кого есть мысли по этому поводу.

Здравствуте. При установки модуля domain access
Всегда выходит ошибка
DatabaseSchemaObjectExistsException: Таблица domain уже существует. в функции DatabaseSchema->createTable() (строка 657 в файле /home/u9715/domains/knl.kz/includes/database/schema.inc).
И потом приходиться восстанавливать базу данных. В чем может быть проблема?

логично предположить в том, что таблица domain уже существует

Я уже удалял таблицы. Но все равно при установке, либо эта ошибка. Либо вообще ошибка сервера. И сайт вообще не запускается.

пишите разработчику

а модуль sites для подобных задач подойдет? там есть возможность устанавливать другие домены, вместо поддоменов.
Просто у меня модуль Domain Access всю малину портит, после него почему-то разные баги появляются, например никакие модули больше не включаются.

Я розобрался с глюками, виноват был модуль subdomain
от модуля sites отказался, и теперь все сделал по статье в инструкции с помощью модуля Domain Access, Подключил поддомены и новые домены. все прекрасно работает. спасибо за статью,

xandeadx Подскажи пожалуйста, можно ли с помощью данного модуля DA отключить общую регистрацию? Зарегистрированные пользователи должны входить только на 1 сайт.

не в курсе

xandeadx, посоветуй как решить проблему:

создаю например 2 сайта:
1.site.ru
2.site.ru

Но если в браузере ввести например 5646.site.ru , то этот сайт тоже открывается. Как сделать так, чтобы эти левые сайты не открывались?

настроить апач, или что вы там в качестве http сервера используете

У меня кстати тоже на одном сайте есть проблема:
«Анонимы видят все ноды на всех поддоменах»
Drupal 7.25 и DA 3.10
писать разработчику?

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

Здравствуйте. Установила модуль, при выполнении п.2 Добавить в конец settings.php строки, сайт перестаёт работать. Убираю эти строки из settings.php сайт выдаёт ошибки:
Notice: unserialize(): Error at offset 9 of 32 bytes in variable_initialize() (line 920 of /home/g/gerba/svadba-vsem.ru/public_html/includes/bootstrap.inc).
Domain module installation is incomplete. See INSTALL.txt and check your settings.php file.
Domain access failed to load during phase: bootstrap include. Please check your settings.php file and site configuration.
Замучилась прямо, не могу понять причину...

читайте логи

Может слышал кто про модуль, который позволяет создавать поддомен на сайте при регистрации пользователя с определенной ролью?

Т.е., регистрируется пользователь с логином user-15; ему создается поддомен user-15.site.ru - и пользователь прикрепляется к этому домену.

А умеет он генерировать поддомены на основе терминов?

Вот такие:
moscow.myfirm.ru
spb.myfirm.ru
kirov.myfirm.ru

Как если бы Москва, Киров и Спб были терминами словаря?

нет

после установки модуля Domain Access появилось желтое, предупредительное сообщение и оно кругом теперь выскакивает: "Эта форма чувствительна к домену, убедитесь, что вы выбрали правильный домен перед сохранением". В журнале по этому поводу ни чего нет. Только мне эта надпись уже достала...

А можно ли с помощью DA настроить использование разных тем для разных доменов?

подскажите как на одном домене показать страницу view одну , а на другом поддомене - другую view ?
т.е. при создании view путь указывается относительный, получаеться например example.com/pathtoview
а когда заходим по m.example.com/pathtoview - нужно отобразить другой view.

модуль, в хук меню "pathtoview".
В колбеке простое условие:
if ($domain == 'first') {
return views_embed_view('view_name', 'display_id');
}
else {
return return views_embed_view('view_name2', 'display_id');
}

Либо если друпал апи не знаете, то я бы вывел страницу через panels. Для каждой панели настроил бы selection_rules на домен. Скорее всего понадобится https://www.drupal.org/project/domain_ctools.

Подскажите а как решить такую задачу:
Материалы привязаны только к домену 1. Задача вывести их во вьюшке (блоке) на домене 2.
Сейчас вьюшка работает только в режиме админа, а для не авторизованного пользователя не выводится. Говорят, что нужно чтобы материал был привязан и к домену 2, но мне нужно чтобы он был привязан строго к домену 1 (это связано с поиском, не хочу дублировать материалы на разных доменах).

Если привязать материал к 2-м доменам, он выводится.
Вопрос, как это обойти? Как вьюшку, что работает только для админа показать не авторизированному пользователю?

кто знает как сделать чтоб в поддомене было robots.txt, sitemap.xml и файл для индексации? или папку подцепить к поддомену использую плагин Domain Access

Здравствуйте, может подскажите как получить из шаблона ноды *.tpl.php название текущего поддомена по его ID. (Через объект ноды виден только ID поддомена).

domain_get_domain()

Спасибо за Инфу!

Добрый день! Подскажите, а можно ли сделать так, чтобы содержимое корзины DC и весь процесс оформления заказа был прозрачен для всех поддоменов. Т.е. чтобы при переходе с поддомена msk.site.ru на piter.site.ru пользователь продолжал видеть добавленные в корзину товары или страницу checkout/***?

> "Эта форма чувствительна к домену, убедитесь, что вы выбрали правильный домен перед сохранением"

это не от ядра DA, а от его субм-ля domain_settings. Отключите его: он нужен только для использования стандартных форм админки под специфич. домен.

на локалке это реально развернуть все?
получил кучу ошибок после включения

Notice: Undefined index: description in drupal_check_module() (line 1233 of E:\OpenServer\domains\domain\includes\install.inc).
(Currently using Domain Access The domain string is invalid for domain:81:
At least one dot (.) is required, except when using localhost.
If you are using drush, please provide the --uri option (e.g. drush en domain --uri="http://example.com/optional_subdirectory").)

Да, на локалке реально.
достаточно в ... apache\conf\vhosts.conf сделать запись с "ServerName ваш_sub.ваш_сайт"

Здравствуйте, скажите пожалуйста, есть какой-нибудь вариант интеграции Domain Access Entity + Search API + Кастомной сущности? Дело в том, что у нас есть мультисайт, кастомную сущность (Недвижимость) необходимо индексировать по всем поддоменам мультисайта, Search API же индексирует только экземпляры сущностей, привязанные к основному домену, а нам необходимо индексировать все. Какое решение может быть?

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании