Мультисайтинг, мультиязычность, контент

Главные вкладки

Аватар пользователя tradof tradof 7 февраля 2012 в 11:19

Дано:
1. Два сайта, каждый со своим доменом второго уровня.
2. Оба сайта мультиязычные. На одном 6 языков, на втором - 3.
3. Некоторый-медиа контент будет общий.

Вопрос: Стоит ли использовать одну базу данных для двух (в будущем - больше) сайтов? Какие плюсы и минусы использования одной базы?

Задача:
1. Разшаривание одинаковых статьей на обоих сайтах.
2. Разшаривание медиа-контента.
2. Возможность объединить комментарии к статьям (не обязательно).

Условие:
Модуль Domain Access не подходит.

Посоветуйте как быть.
Много что перечитал, но на эти вопросы и задачи толкового ответа не нашёл.

Комментарии

Аватар пользователя boneg boneg 7 февраля 2012 в 12:03

Попалась аналогичная задача на D7 (сейчас в работе). Правда язык один, поддоменов 24 (каждый на одну область Украины). Контент и термины таксономии нужно было разделить по поддоменам, все остальное общее.

Идеальным и самым рабочим решением стало:

1. В .htaccess захардкодить список доменов, все несуществующую редиректить на основной.
2. К каждой ноде и термину таксономии добавить скрытое поле с Id домена.
3. Редирект с нод и страниц терминов, если к ним пытаются обратиться с "не родного" домена (касается только терминов, которые имеют скрытое поле "домен").
4. Переопределить страницу термина, чтобы выводился список нод только с текущим доменом.
5. Переопределить форму создания ноды (которая зависит от домена), чтобы при выборе города предлагались только те, которые в области текущего домена.
6. Редирект для страницы редактирования ноды с "неродного" домена на "родной". (нужно было чтобы юзер при редактировании своего объявления мог изменить только город, а не область).
7. Писать домен и город по умолчанию в куки юзеру (кое-где понадобилось чтобы предлагать в формах город по умолчанию).
8. Подключить geoip БД, чтобы предлагать юзеру домен и город, когда он впервые на сайте.
9. Дописать дополнительные домен-токены, которые явно есть куда пихать (в title, дескрипшн и т.д.)

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

Что вышло:
1.Урлы нод, привязанных к домену имеют вид oblast.site.ua/gorod/kategoriya/title
Термины имеют вид oblast.site.ua/gorod, oblast.site.ua/kategoriya. Страницы вида oblast.site.ua/gorod/kategoriya выводятся своим модулем (сайт не использует views).
2. Ноды не привязанные к домену доступны как по oblast.site.ua/title, так и по oblast2.site.ua/title
3. Никаких проблем с кешированием, администрированием и выводом данных.
4. Удобно ваять блоки типа "Другие объявления в Киеве", "Объявления рубрики Промышленность в других областях Украины" и т.д.
5. Сайт нужно было "подружить" с некоторыми другими проектами средствами XML-RPC, никаких проблем и код получился экономный - отдавать данные в зависимости от того, на какой домен обратились.. Ну и еще много других плюшек.

Насколько слышал, с Domain Access это все вроде тоже как умеет, но нам он тоже не подошел. Быстрее было написать решение самим, чем дописывать функционал к этому модулю.

Сайт выложу через пару недель, он еще в работе.

Если вы пойдете тем же путем - стучитесь, может у вас есть интересные решения или я подскажу как сделал я.

Аватар пользователя MainVisor MainVisor 7 февраля 2012 в 14:37

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

мне нужно чтобы у каждого пользователя был свой блог на поддомене username.site.org и чтобы пользователь мог выбирать-конфигурировать тему, блоки, меню. Мультисайтинг стандартный друпаловкий с одной базой и префиксами на разные поддомены. Все профили соединены. В общем это сделать легко,

но при этом варианте как делать вьюсы, чтобы с нескольких поддоменов показывать материалы с одной категории на главной?

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

Аватар пользователя MainVisor MainVisor 7 февраля 2012 в 14:59

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

Аватар пользователя tradof tradof 7 февраля 2012 в 15:31

2 boneg
Ваше решение для меня - новичка*, на данный момент что-то нереальное. К сожалению.

2 MainVisor
Благодарствую за чёткую формулировку.

Пока вижу такой вариант.
Использовать Taxonomy, Taxonomy Menu, для каждого сайта отдельный словарь и меню.
При создании статьи, указывать нужный словарь, или оба.

Остались такие вопросы:
1. Использовать одну базу для всего, или разделить для каждого сайта отдельную + общие таблицы (хостер предлагает до 30 соединений к mysql, хватит ли?
2. Расшаривание медиа-контента.
3. (забыл)

* Я новичёк в Друпале. Да и от программирования очень далёк. И тему для Друпала ещё не понял как делать. Smile

Аватар пользователя boneg boneg 7 февраля 2012 в 15:41

To MainVisor
тут, наверное, лучше пойти как раз через Domain Access. Планируются ведь динамические поддомены (юзер.сайт.ру). Собирать под каждого юзера миллион таблиц с новым префиксом - не выход. Выбор темы для юзера есть из коробки. Индивидуальные блоки и меню нужно только дописать, даже элементарно привязав эти настройки к сущности профиля.
В любом случае покодить прийдется. А если помимо этого запущена стандартная схема мультисайтинга - получать данные из таблиц с другим префиксом есть из коробки тоже ( db_set_active ) или же воспользовавшись XML-RPC смотря где и как нужно.

Аватар пользователя tradof tradof 7 февраля 2012 в 16:37

Кстати.

На сколько я понимаю, для SEO не очень хорошо иметь одинаковый контент на разсных сайтах.
Следовательно, для каждого сайта надо делать свою статью. В которых можно написать в одной больше, в другой меньше.
Есть такое предлоложение, которое упростило бы задачу. В Типах материала указать поле body, которе будет отображаться на определённом сайте (field_site2_name).
Следовательо, на site1 и site2 надо делать правильный View с нужным запросом из базы данных. Как-то так. Но я в этом не силён. Может кто-нибудь понял что я имею ввиду?

Аватар пользователя MainVisor MainVisor 8 февраля 2012 в 12:30

Domain Access как уже писал - это урезанный вариант мультисайтинга. Например, темы оформления для assigned domens может менять фактически только админ. Нет распределения прав, ролей и т.п.

Аватар пользователя MainVisor MainVisor 8 февраля 2012 в 12:26

tradof,

Одна база для всех, на каждый сайт свой префикс. Для каждого проекта можно делать свой вьюс тизер с фильтром по профилю.

Аватар пользователя tradof tradof 9 февраля 2012 в 17:47

В мультисайтинге легко сделать общий контент (используюя префикс в настройках settings.php).

Как сделать частичный общий контент? Например:
Статья 1 есть только в базе первого сайта
Статья 2 есть в базе первого и второго сайта
Статья 3 есть только в базе второго сайта

Варианты:
1. Есть модуль Deployment. Не понятно только то, можно ли его использовать для разных сайтов по содержанию?
2. Использовать экспорт-импорт.
3. Использовать 2 подключения к нужным базам данных.
4. Какие ещё варианты?
5. Может ли Domain Access работать с разными базами данных? И соответственно сохранять контент в определённую базу?

Один из сайтов может вырасти, и придёться переносить на более мощный хостинг. И да, это одно из возможных условий.

Аватар пользователя MainVisor MainVisor 10 февраля 2012 в 16:14

В вашем случае как раз подойдет Domain Access,
в моем, когда персональных веб-сайтов (блогов) может быть не ограниченно, нет.