Мультисайтинг или?

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

Аватар пользователя Alex_R Alex_R 19 декабря 2009 в 0:11

Есть работающий сайт, нужно создать еще один, который будет отличаться от первого все лишь:
1. темой оформления (как привязать к доменному имени?).
2. сортировкой расположения разделов на форуме.
3. разными материалами помещаемыми на главную (база материалов общая).
Самое главное, что при заполнении нового материала пользователь мог бы сразу расставить галочки на какой сайт этот материал помещать на главную страницу (первый/второй/оба).

4. несколько другой структурой меню.
5. своим логотипом помещаемым на загружаемые фотографии.
6. одним-двумя отличными от первого типами материалов.
7. может еще чем то по мелочи...

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

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

Комментарии

Аватар пользователя Alex_R Alex_R 6 января 2010 в 18:54

VladSavitsky wrote:
Мультисайтинг с разными базами.

Решил пойти именно этим путем.
Огромное спасибо за видео с Вашим докладом на эту тему - почти все сразу стало понятно.

Далее несколько вопросов - если сталкивались подтвердите или опровергните пожалуйста мои догадки чтобы лишних копий не наломать и времени на всю настройку меньше потратить.

1. Пользователи общие и роли одинаковые, однако на каждом сайте соответствия свои. (т.е. например, на одном сайте Вася Иванов админ, а на другом просто зарегистрированный пользователь)
Таблицы users и role делаю общими, а таблицу users_roles и permission для каждого сайта свои - так будет работать?

Вроде работает - тестирую.

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

3. На сайте установлен модуль личных сообщений Private messages, если я делаю общими таблицы pm_* то пользователи смогут обмениваться личными сообщениями между сайтами или еще что то надо будет настраивать?

Сделал - отлично работает. Пока проверял только на Денвере.

4. Аналогичный вопрос про BUEditor. Если настройки его для всех сайтов общие, то достаточно ли объединения таблиц bueditor_buttons и bueditor_editors?

Сделал - отлично работает. Пока проверял только на Денвере.

5. Разделение контента решил делать по типам материалов. Несколько типов материалов уникальные для каждого сайта, а некоторые общие. Если один из общих типов создан на CCK + Views (галереи) то как я понимаю придется делать общими все таблицы, которые в докладе было сказано, что объединять опасно. Что опасно - верю, а в чем опасность не очень понимаю. Можно этот момент осветить поподробнее?

6. Если я на одном из сайтов подключу новый модуль, то он свои таблицы создаст в общей базе или в базе данного сайта?

Разобрался.

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

Думаю, что вопросы еще возникнут...

P.S. Под Денвером тестирую путем переименования папки установки и рестартом. А возможно сделать под ним одновременный доступ к двум сайтам?

Аватар пользователя Alex_R Alex_R 9 января 2010 в 0:08

Alex_R wrote:
2. Не понял про блокировку пользователя. В какой таблице хранится информация? Возможно ли заблокировать пользователя только на одном сайте, а на другом чтобы он остался незабаненым при таком варианте построения?

Как я понял эта проблема не решается никаким перераспределением таблиц. За "забаненность" по логину отвечает поле "status" в таблице "Users" т.е. логин и статус находятся в одной таблице и разделить их для каждого сайта возможности нет. Вижу вариант делать это через роли. Т.е. анонимный пользователь и зарегистрированный пользователь имеют совершенно одинаковые права, но при регистрации автоматически на каждом сайте (как сделать на каждом сайте, а не только на том на котором регистрируется пока не понял) пользователю присваивается роль с правами нынешнего зарегистрированного пользователя, которую потом с провинившегося пользователя легко снять.

Аватар пользователя md5@drupal.org md5@drupal.org 19 декабря 2009 в 13:52

В принципе, вам может подойти Domain Access. Разные темы для сайтов и разное наполнение с одной базы получите точно, насчет, правда, остального не уверен. Расставлять, куда размещать материал, тоже можно.

Аватар пользователя md5@drupal.org md5@drupal.org 21 декабря 2009 в 1:40

"kiron" wrote:
А в случае размещения одинакового блока на всех сайтах или одной ноды поможет?

База одна и та же, значит поможет. Главное, указать для ноды публикацию на нужных доменах. Местоположение блока задается в теме, а значит проблем теоретически быть не должно. Говорю «теоретически», потому что на практике проблемы возникают — приходится следить за тем, что где публикуется и размещается, и ничего не напутать. В крайнем случае, всегда выручит db_query() Smile

Аватар пользователя VladSavitsky VladSavitsky 6 января 2010 в 19:41

"Alex_R" wrote:
P.S. Под Денвером тестирую путем переименования папки установки и рестартом. А возможно сделать под ним одновременный доступ к двум сайтам?

Можно. Нужно настроить виртуальные хосты для каждого домена.
Под виндой пробовал в денвере сделать - не удалось. Воспользовался XAMPP и там получилось настроить вирт. хосты быстро. (Я в линуксе работаю - чего и всем желаю. С днем рождения Иисуса Христа!).

п.7
Это дублирование контента. ПС за это "штрафуют".
п.5
Про какие таблицы идёт речь? Поименный список, пожалуйста.
п.2
Если таблица, где хранится эта информация общая - то блокировка будет распространятся на все домены, если не общая - то у каждого сайта своя будет.

Аватар пользователя Alex_R Alex_R 6 января 2010 в 23:52

Спасибо за ответ!

VladSavitsky wrote:
"Alex_R" wrote:
P.S. Под Денвером тестирую путем переименования папки установки и рестартом. А возможно сделать под ним одновременный доступ к двум сайтам?

Можно. Нужно настроить виртуальные хосты для каждого домена.
Под виндой пробовал в денвере сделать - не удалось. Воспользовался XAMPP и там получилось настроить вирт. хосты быстро. (Я в линуксе работаю - чего и всем желаю. С днем рождения Иисуса Христа!).

Вот у меня в Денвере это тоже не получилось. Линукс поставить пока возможности не наблюдается Sad
VladSavitsky wrote:

п.7
Это дублирование контента. ПС за это "штрафуют".

Вот и я так понял, значит надо каким то образом индексировать материал только на родительском сайте, а на остальных это запрещать. Как это сделать пока не понял - создал отдельную тему - http://www.drupal.ru/node/38855 дальнейшие действия вроде понятны, в соответствующем .tpl.php проверяем эту переменную на соответствие текущему сайту и в зависимости от совпадения или нет выдается разный шаблон. Правильным путем я иду?

VladSavitsky wrote:

п.5
Про какие таблицы идёт речь? Поименный список, пожалуйста.

чуть позже напишу полный список что сделал общим.
пока вопрос за что отвечает таблица batch? - я ее не объединял.

VladSavitsky wrote:

п.2
Если таблица, где хранится эта информация общая - то блокировка будет распространятся на все домены, если не общая - то у каждого сайта своя будет.

Это понятно, я не понял в какой таблице это хранится? Таблица access это блокировка по IP, а по логину в какой?
Еще раз спасибо за ответ!

Аватар пользователя Alex_R Alex_R 9 января 2010 в 17:45

Пытаюсь разбираться, пока результат неудовлетворительный.
У обоих сайтов общими таблицами прописаны:
bueditor_buttons
bueditor_editors
filters
filter_formats
locales_source
locales_target
pm_block_user
pm_email_notify
pm_index
pm_message
pm_tags
pm_tags_index
profile_fields
profile_values
role
sessions
users - с этими таблицами все прошло отлично - по ним вопросов надеюсь не возникнет, пользователи создаются (и удаляются), права у ролей на каждом сайте свои, роли у юзеров тоже на каждом сайте свои, редактор работает, личные сообщения между сайтами гуляют.

Хотя есть один вопрос - много где читал, что должна возникнуть проблема с аватарами и знаю вариант ее решения (либо установкой соответствующего модуля, либо прописыванием функции в template.php) Так вот у меня эта проблема не возникла - все работает! Это информация устарела и эту функцию включили в дистрибутив Друпала или как это понимать?

А вот с объединением контента честно говоря какая то каша Sad
Напомню задачу. У меня получается 4 общих типа материалов и на каждом сайте еще и свои, которые на других сайтах невидны. С помошью модуля content_access настроил видимость материалов на каждом сайте - все работает.

Итак, изначально объединил:

comments - у общих типов материалов комментарии разрешены.
content_node_field
content_node_field_instance
content_type_ХХХХХХ
content_type_ХХХХХХ
content_type_ХХХХХХ
content_type_ХХХХХХ - где ХХХХХ - название общих типов материала.
files - видимо зря объединил - про это будет отдельный вопрос.
forum - пока не разобрался что в этой таблице хранится, но поскольку форум частично общий, то объединил.
fupload_previewlist - не уверен, что надо. Что в ней хранится не понял, понял что связано с мультизагрузкой изображений, а она используется в общем материале, поэтому объединил.
node
node_access
node_comment_statistics
node_counter
node_galleries - подозрение, что таблица осталась от удаленного одноименного модуля, но она не пустая, хотя модуль удален, и материалов этого типа не осталось - можно ее удалить?
node_revisions
node_type
views_display - в общих типах материалов используются представления.
views_object_cache
views_view

И вот такие проблемы возникли:

1. При попытке создания материала выдает:
warning: Invalid argument supplied for foreach() in W:\home\ХХХХХХХХХХ.ru\www\sites\all\modules\cck\content.module on line 1022.
При этом материал создается. На общих материалах ошибка появляется всегда, а на раздельных закономерность не отловил - то есть, то нет....

2. модуль computed field почему то не хочет сохранять информацию о сайте родителе, а каждый раз пересчитывает ее заново вне зависимости от настроек. И как следствие всегда показывает текущее название сайта. Вообщем, неработает Sad

3. При редактировании настроек любого поля в общих материалах выдает примерно такое:

* user warning: Table 'content_type_image' already exists query: CREATE TABLE ННННН.content_type_image ( `vid` INT unsigned NOT NULL DEFAULT 0, `nid` INT unsigned NOT NULL DEFAULT 0, PRIMARY KEY (vid), INDEX nid (nid) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ in W:\home\ХХХХХХХ.rr\www\includes\database.inc on line 529.
* user warning: Table 'content_type_image' already exists query: CREATE TABLE ННННН.content_type_image ( `vid` INT unsigned NOT NULL DEFAULT 0, `nid` INT unsigned NOT NULL DEFAULT 0, `field_image_opis_value` LONGTEXT DEFAULT NULL, `field_image_opis_format` INT unsigned DEFAULT NULL, PRIMARY KEY (vid), INDEX nid (nid) ) /*!40100 DEFAULT CHARACTER SET UTF8 */ in W:\home\ХХХХХХХ.rr\www\includes\database.inc on line 529.

пытался некоторые таблицы разделять обратно по личным базам - положительных результатов не видно.

Собственно вопрос - что я зря объединил или что необходимо объединить еще? Как решать возникшие проблемы?

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