27.08.2009 | 14:01

Очень часто по роду деятельности (в креативном агентстве "МЖ") я участвую в дискуссиях по поводу использования той или иной системы управления. Уже не в первый раз мне приходилось в ответ на утверждение, что UMI достаточно гибкий инструмент для разработчика, слышать, что "все сайты в одной базе - это не гибкость". И действительно - одна база на все сайты налагает некоторые ограничения.

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

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

В-третьих, салат из различных шаблонов данных иногда тоже весьма не удобен.

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

Итак, опишем все поэтапно.
Первое, что нам надо сделать − это дамп "чистой" базы данных, который образуется при первой инсталяции вашей системы на хост. Можно, конечно, взять и не первой свежести, но, если это критично, ее надо будет подчистить от лишних объектов.
Самое главное в этой базе данных - это основной домен и лицензионный ключ... хотя и их конечно можно при желании подредактировать, если нет "нулевой"  базы именно от конкретной инсталяции.

Итак, мы имеем дамп "нулевой" БД, создаем на хостинг-аккуанте новую базу для нового сайта и импортируем туда дамп.

Теперь нам надо сделать так, чтобы при запросе конкретного хоста, включалась именно та база данных, которая нам нужна. Делается это очень просто: один из первых файлов, загружаемых системой, - это mysql.php, который содержит настройки подключения к БД. Нам остается его всего лишь немного модифицировать:

  1. if ($_SERVER['HTTP_HOST'] == 'domain1.ru' || $_SERVER['HTTP_HOST'] == 'www.domain1.ru') {
  2.   $db = 'db_2';    
  3. }
  4. else {
  5.     $db = 'db_1';
  6. }
  7.  
  8. mysql_connect("mysql.server.ru", "dbu_1", "pass") or die(mysql_fatal());
  9. mysql_select_db($db) or die(mysql_fatal());
  10.  
  11. mysql_query("SET NAMES utf8_general_ci");
  12. mysql_query("SET CHARSET utf8");
  13.  
  14. mysql_query("SET CHARACTER SET utf8");
  15. mysql_query("SET SESSION collation_connection = 'utf8_general_ci'");

В общем надо просто добавить проверку текущего домена и если домен = domen1.ru или www.domen1.ru, дать соответствующую базу (в условии обязательно надо указать два варианта и все зеркала к домену). А можно еще немного модифицировать, если доменов не один и не два:

  1. define ("STAT_DISABLE", true);
  2.   switch($_SERVER['HTTP_HOST']) {
  3.     default:
  4.            $db = 'db_1';
  5.     break;
  6.  
  7.      case 'domain1.su':
  8.     case 'www.domain1.su':
  9.       $db = 'db_2';
  10.     break;
  11.     
  12.     case 'domain2.ru':
  13.     case 'www.domain2.ru':
  14.       $db = 'db_3';    
  15.     break;
  16.  
  17.     case 'domain3.ru':
  18.     case 'www.domain3.ru':
  19.          $db = 'db_4';  
  20.     break;
  21.     
  22.     case 'domain4.com':
  23.     case 'www.domain4.com':
  24.          $db = 'db_4';  
  25.     break;
  26.     
  27.     
  28.   }
  29.  
  30.   mysql_connect("mysql.server.ru", "dbu_1", "pass") or die(mysql_fatal());
  31.   mysql_select_db($db) or die(mysql_fatal());
  32.  
  33.   mysql_query("SET NAMES utf8_general_ci");
  34.   mysql_query("SET CHARSET utf8");
  35.  
  36.   mysql_query("SET CHARACTER SET utf8");
  37.   mysql_query("SET SESSION collation_connection = 'utf8_general_ci'")

 

Теперь для того, чтобы попасть в админку domain2.ru нужно Перейти http://domain2.ru/admin/, а чтобы в админку domain1.su по http://domain1.su/admin/ соответственно, при этом будут вызваны разные базы данных. Можете для каждого сайта делать индивидуальных рутов...да все, что захотите.

Важно: Во всех базах данных основной домен у Вас должен оставаться такой, какой есть, т.е. тот на котором висит лицензия.

Не мудрствуя лукаво можно поступить двумя способами:

  1. Сделать нужный домен зеркалом основного домена и создавать структуру не обращая внимания на название домена.
  2. Создать новый сайт в админке.

 

Вот и все.

 

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

идем в папку classes/systemCore/regedit/regedit.php
Строка 19: protected function __construct($useFileCache = true) правим на protected function __construct($useFileCache = false)

Возможно, это как-то влияет на производительность системы в целом, но я не заметил разницы, к тому же есть очень полезная фишка для ускорения UMI минимум на треть - это отключение статистики. Опять же в файле mysql.php в любом месте ставим строку define ("STAT_DISABLE", true);

К вышесказанному добавлю, что изменения в в файле  regedit.php будут затерты при обновлении системы через модуль "Автообновление".

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

Надеюсь, моя статья кому-нибудь поможет ;)

Читайте также:

Категории

Теги

обзоры маркетинг developer программинг менеджмент xslt технологии документация шаблоны Служба Заботы партнеры мероприятия маркетинг веб студии москва UMI UMISummit события umisummit лицензии новинки UMI Edu UMI Cloud продукты UMI модуль Кейсы business облако тегов кастомы uwdc Челябинск разработчики конференция Конкурс UMIRU exchange 28 Обмен данными 1C Интеграция с 1С версии UMICMS хостинг юмихост umihost cms клиенты кейсы интернет-магазин UMICMS рейтинг интернет-маркетинг продвижение seo MySQL разделение баз данных tpl local scope macro итоги года SAPE мероприятие рынок веб разработки экономика Сергей Котырев Сибирская интернетнеделя видео UMIWorkshop интернетмагазин интернет магазин flash actionscript каталог анимация техподдержка Золотой сайт umi_workshop акция стратегия партнерская_программа партнерство highload РуПромо Машков версия 2_7 кэширование скорость стихи день рождения статьи пресс конференция версия 2_5 Edit_in_Place онлайн платежи кризис достижения CeBIT внедрения umi cms блоги верстка релиз EditInPlace изучение Юми создание модуля модули ReMIX UMI_CMS_Net iPhone XML драйвер как убрать лампочку форма обратной связи языковые версии CMS Pistols музыка UMICMS 28 удобство юзабилити usability user experience интерфейсы CMS Eye tracking ай тракинг usability test UXRussia управление сайтом RIW Russian internet week Softool выставки интернет сайты umisound cms pistols РИФ 2011 Tagline качество 2012 UMISound Полюса Илья Разин Марат Машков

Авторы блога